A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 黑妞~ 金牌黑马   /  2014-8-28 10:51  /  7221 人查看  /  47 人回复  /   3 人收藏 转载请遵从CC协议 禁止商业使用本文

下面是精心整理的Java数组操作的10大方法,大部分代码都来自Stack Overflow。

0、定义一个Java数组
  1. String[] aArray = new String[5];
  2. String[] bArray = {"a","b","c", "d", "e"};
  3. String[] cArray = new String[]{"a","b","c","d","e"};
复制代码



第一种是定义了一个数组,并且指定了数组的长度,我们这里称它为动态定义。

第二种和第三种在分配内存空间的同时还初始化了值。

1、打印Java数组中的元素
  1. int[] intArray = { 1, 2, 3, 4, 5 };
  2. String intArrayString = Arrays.toString(intArray);

  3. // print directly will print reference value
  4. System.out.println(intArray);
  5. // [I@7150bd4d

  6. System.out.println(intArrayString);
  7. // [1, 2, 3, 4, 5]
复制代码



这里的重点是说明了Java中数组的引用和值得区别,第三行直接打印intArray,输出的是乱码,因为intArray仅仅是一个地址引用。第4行输出的则是真正的数组值,因为它经过了Arrays.toString()的转化。对Java初学者来说,引用和值仍需重视。

2、从Array中创建ArrayList
  1. String[] stringArray = { "a", "b", "c", "d", "e" };
  2. ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));
  3. System.out.println(arrayList);
  4. // [a, b, c, d, e]
复制代码


为什么要将Array转换成ArrayList呢?可能是因为ArrayList是动态链表,我们可以更方便地对ArrayList进行增删改,我们并不需要循环Array将每一个元素加入到ArrayList中,用以上的代码即可简单实现转换。

3、检查数组中是否包含某一个值
  1. String[] stringArray = { "a", "b", "c", "d", "e" };
  2. boolean b = Arrays.asList(stringArray).contains("a");
  3. System.out.println(b);
  4. // true
复制代码



先使用Arrays.asList()将Array转换成List<String>,这样就可以用动态链表的contains函数来判断元素是否包含在链表中。

4、连接两个数组
  1. int[] intArray = { 1, 2, 3, 4, 5 };
  2. int[] intArray2 = { 6, 7, 8, 9, 10 };
  3. // Apache Commons Lang library
  4. int[] combinedIntArray = ArrayUtils.addAll(intArray, intArray2);
复制代码



ArrayUtils是Apache提供的数组处理类库,其addAll方法可以很方便地将两个数组连接成一个数组。

5、声明一个数组内链
  1. method(new String[]{"a", "b", "c", "d", "e"});
复制代码



6、将数组中的元素以字符串的形式输出
  1. // containing the provided list of elements
  2. // Apache common lang
  3. String j = StringUtils.join(new String[] { "a", "b", "c" }, ", ");
  4. System.out.println(j);
  5. // a, b, c
复制代码



同样利用StringUtils中的join方法,可以将数组中的元素以一个字符串的形式输出。

7、将Array转化成Set集合
  1. Set<String> set = new HashSet<String>(Arrays.asList(stringArray));
  2. System.out.println(set);
  3. //[d, e, b, c, a]
复制代码



在Java中使用Set,可以方便地将需要的类型以集合类型保存在一个变量中,主要应用在显示列表。同样可以先将Array转换成List,然后再将List转换成Set。

8、数组翻转
  1. int[] intArray = { 1, 2, 3, 4, 5 };
  2. ArrayUtils.reverse(intArray);
  3. System.out.println(Arrays.toString(intArray));
  4. //[5, 4, 3, 2, 1]
复制代码



依然用到了万能的ArrayUtils。

9、从数组中移除一个元素
  1. int[] intArray = { 1, 2, 3, 4, 5 };
  2. int[] removed = ArrayUtils.removeElement(intArray, 3);//create a new array
  3. System.out.println(Arrays.toString(removed));
复制代码



再补充一个:将一个int值转化成byte数组
  1. byte[] bytes = ByteBuffer.allocate(4).putInt(8).array();

  2. for (byte t : bytes) {
  3. System.out.format("0x%x ", t);
  4. }
复制代码




47 个回复

正序浏览
小胡 中级黑马 2015-12-27 23:30:11
47#
牛人啊,受教了.
回复 使用道具 举报
顶!!!!!!
回复 使用道具 举报
风飘逸 来自手机 中级黑马 2015-3-23 12:43:09
45#
好多还不知道,收藏,点赞。
回复 使用道具 举报
总结的很全面啊
回复 使用道具 举报
收藏了!!{:3_51:}
回复 使用道具 举报
顶大神,学习了
回复 使用道具 举报
顶一个  赞一下!!!!
回复 使用道具 举报
收藏下,没事看看学习学习,谢谢分享.
回复 使用道具 举报
正好学习到数组,虽然还有一些东西不明吧还没学习到,但也受益匪浅。感谢分享
回复 使用道具 举报
学习咯.......
回复 使用道具 举报
fighting!fighting!
回复 使用道具 举报
唐僧 来自手机 中级黑马 2015-2-7 23:34:47
36#
有点扛不住
回复 使用道具 举报
这个真心不错。谢谢。
回复 使用道具 举报
小手一抖积分到手。
回复 使用道具 举报
xygzp415 发表于 2015-1-16 21:28
请教一个问题关于上面的第6条使用StringUtils.join(Object[] array,String sperator)方法使用int[]数组不使 ...

不好意思本来是要贴图的,不想链接上去了图没有上去
回复 使用道具 举报
请教一个问题关于上面的第6条使用StringUtils.join(Object[] array,String sperator)方法使用int[]数组不使用String[]为什么打印出来的是HashCodeint[] intArray = {1,2,3,4,5};
System.out.println(StringUtils.join(intArray,','));
C:\Users\Administrator.TOJZJCTKG2UXONZ\Desktop\1.jpg
C:\Users\Administrator.TOJZJCTKG2UXONZ\Desktop\1.jpg
打印的结果
[I@42a57993
C:\Users\Administrator.TOJZJCTKG2UXONZ\Desktop\2.jpg
但是StringUtils里面源代码缩写应该不会出现这种情况,请老师指教
下面是源代码的实现
public static String join(final Object[] array, String separator, final int startIndex, final int endIndex) {
        if (array == null) {
            return null;
        }
        if (separator == null) {
            separator = EMPTY;
        }

        // endIndex - startIndex > 0:   Len = NofStrings *(len(firstString) + len(separator))
        //           (Assuming that all Strings are roughly equally long)
        final int noOfItems = endIndex - startIndex;
        if (noOfItems <= 0) {
            return EMPTY;
        }

        final StringBuilder buf = new StringBuilder(noOfItems * 16);

        for (int i = startIndex; i < endIndex; i++) {
            if (i > startIndex) {
                buf.append(separator);
            }
            if (array != null) {
                buf.append(array);
            }
        }
        return buf.toString();
    }
难道只能操作String类型的数组吗
C:\Users\Administrator.TOJZJCTKG2UXONZ\Desktop\3.jpg




回复 使用道具 举报
果然不错用库提供的方法还是比较给力的
回复 使用道具 举报
还没有学到数组,正在学习正则表达式......
回复 使用道具 举报
正好用到,谢谢
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马