黑马程序员技术交流社区

标题: Java数组操作的10大方法 [打印本页]

作者: 黑妞~    时间: 2014-8-28 10:51
标题: Java数组操作的10大方法

下面是精心整理的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. }
复制代码





作者: 粺¹³¼畅    时间: 2014-8-28 11:01
牛人啊,谢谢分享!
作者: 回头浪子心    时间: 2014-8-28 18:32
路过、、、、、
作者: hi2hcs    时间: 2014-8-30 09:41
受教!!!!
作者: 热火程序猿    时间: 2014-9-1 10:42
啊哦,玩转数组
作者: 迷失的独白    时间: 2014-9-9 00:02
学习了啊
作者: 烟默year    时间: 2014-10-28 12:00
我是来学习的!
作者: 想成为黑马    时间: 2014-11-4 11:55
看了后,受益匪浅
作者: chuck_heima    时间: 2014-11-8 12:59
收藏收藏 必须的!
作者: 艾维苏    时间: 2014-11-13 11:53
这个必须会~
作者: xiaguangcheng    时间: 2014-11-16 18:53
灰常实用,拿走了
作者: 一朵奇葩    时间: 2014-11-17 09:54
多谢分享,学习了
作者: rnyrnyrny    时间: 2014-11-21 12:07
已收藏,很好的总结
作者: 逗比程序员    时间: 2014-11-22 13:20
学习学习,参考参考
作者: scoto263    时间: 2014-11-25 21:22
搜藏一下。。。慢慢摸索。
作者: 茂茂    时间: 2014-12-1 21:35
实用,收藏
作者: 怪物军师    时间: 2014-12-1 22:25
果断收藏
作者: 怪物军师    时间: 2014-12-2 23:50
收藏一下,慢慢理解
作者: l763631191    时间: 2014-12-3 13:24
:)很好!!!收藏了~
作者: 武xiao    时间: 2014-12-12 21:35
很棒,差不多快忘了,看看就想起来了
作者: じ☆ve紫夜    时间: 2014-12-12 21:52
涨姿势了,嘻嘻!!!
作者: chaijie    时间: 2014-12-12 21:58
这个用起来更方便
作者: 武xiao    时间: 2014-12-16 21:37
我是来看看除了三个代码之外的方法
作者: 古月哥欠    时间: 2014-12-17 01:16
刚学,不过这个更全面,thank you!
作者: 飘渺之旅    时间: 2014-12-21 09:36
刚接触数组,学的还很浅,这个很是受用,谢谢楼主了。
作者: songkaihua    时间: 2014-12-21 10:07
刚学!二维数组学的不好!
作者: chaijie    时间: 2014-12-29 21:53
很果断的赞了

作者: q798500920    时间: 2015-1-4 11:52
快学到数组了 提前预习预习
作者: HHFSpeed    时间: 2015-1-9 21:17
正好用到,谢谢
作者: 木子轩    时间: 2015-1-10 16:31
还没有学到数组,正在学习正则表达式......
作者: 枪杆不如笔杆    时间: 2015-1-14 19:21
果然不错用库提供的方法还是比较给力的
作者: xygzp415    时间: 2015-1-16 21:28
请教一个问题关于上面的第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





作者: xygzp415    时间: 2015-1-16 21:30
xygzp415 发表于 2015-1-16 21:28
请教一个问题关于上面的第6条使用StringUtils.join(Object[] array,String sperator)方法使用int[]数组不使 ...

不好意思本来是要贴图的,不想链接上去了图没有上去
作者: 张宁111    时间: 2015-1-21 21:27
小手一抖积分到手。
作者: xyycici    时间: 2015-1-30 19:27
这个真心不错。谢谢。
作者: 唐僧    时间: 2015-2-7 23:34
有点扛不住
作者: 骑士向前    时间: 2015-2-14 06:51
fighting!fighting!
作者: 木子轩    时间: 2015-2-26 16:57
学习咯.......
作者: lostnotes    时间: 2015-3-10 10:00
正好学习到数组,虽然还有一些东西不明吧还没学习到,但也受益匪浅。感谢分享
作者: keven1119    时间: 2015-3-19 14:51
收藏下,没事看看学习学习,谢谢分享.
作者: 小亮smile    时间: 2015-3-19 23:17
顶一个  赞一下!!!!
作者: 独孤忆    时间: 2015-3-20 21:20
顶大神,学习了
作者: 七十九刀    时间: 2015-3-20 21:45
收藏了!!{:3_51:}
作者: zhaotiao3080    时间: 2015-3-21 08:47
总结的很全面啊
作者: 风飘逸    时间: 2015-3-23 12:43
好多还不知道,收藏,点赞。
作者: 高怀    时间: 2015-3-26 00:55
顶!!!!!!
作者: 小胡    时间: 2015-12-27 23:30
牛人啊,受教了.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2