发新帖

Java数组操作的10大方法

[复制链接]
15902 13
本帖最后由 vxzv 于 2014-11-1 17:40 编辑

下面是精心整理的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. 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. }
复制代码
译文链接:http://www.codeceo.com/article/10-java-array-method.html
英文原文:Top 10 Methods for Java Arrays
翻译作者:码农网 – 小峰

举报 使用道具

回复

精彩评论13

kanon    发表于 2014-11-3 12:00:30 | 显示全部楼层
转载的 补充一下 数组的初始化
在Java中定义一个数组的方法有:
Long[] numbers;  //一般使用的定义方式,可分为静态和动态两种定义方式,下有说明.
Long   numbers[]; //跟上面用法一致.
Long... numbers;  //只能用于函数中形参的定义.
[]Long numbers;  //错误的定义方式,没这种写法.

静态定义:
int[] numbers = {1, 2, 3, 4, 5};
动态定义:
int size = 5;
int[] numbers = new int[size];
for (int i = 0; i < size; i++) {
     numbers[i] = i + 1;
}

int... xx 的形参定义:
public void testArray(int... numbers) {
   for (int i : numbers) {
      //打印传过来的形式参数的所有元素.
      System.out.println(i);
   }
}

举报 使用道具

回复 支持 1 反对 0
JackIO    发表于 2014-11-2 08:53:32 | 显示全部楼层
总结很完整,赞一个。

举报 使用道具

回复 支持 反对
vxzv    发表于 2014-11-2 09:20:25 | 显示全部楼层
ReverseFuture 发表于 2014-11-2 08:53
总结很完整,赞一个。

我也觉得很不错,我刚开始学的是c语言,java跟c定义数组不一样,后来我连java定义数组都不会了。。。。

举报 使用道具

回复 支持 反对
JackIO    发表于 2014-11-4 13:23:39 | 显示全部楼层
vxzv 发表于 2014-11-2 09:20
我也觉得很不错,我刚开始学的是c语言,java跟c定义数组不一样,后来我连java定义数组都不会了。。。。 ...

我也是,用java比较少,所以一段时间不用就忘了怎么用了。

举报 使用道具

回复 支持 反对
vxzv    发表于 2014-11-4 15:56:15 | 显示全部楼层
ReverseFuture 发表于 2014-11-4 13:23
我也是,用java比较少,所以一段时间不用就忘了怎么用了。

晕,这个也能忘????

举报 使用道具

回复 支持 反对
vxzv    发表于 2014-11-4 15:56:44 | 显示全部楼层
kanon 发表于 2014-11-3 12:00
转载的 补充一下 数组的初始化
在Java中定义一个数组的方法有:
Long[] numbers;  //一般使用的定义方式,可 ...

不错,多谢!!!!!

举报 使用道具

回复 支持 反对
JackIO    发表于 2014-11-5 21:04:18 | 显示全部楼层
vxzv 发表于 2014-11-4 15:56
晕,这个也能忘????

是啊,会跟C++搞混,呵呵,用的不熟。

举报 使用道具

回复 支持 反对
vxzv    发表于 2014-11-14 20:06:09 | 显示全部楼层
ReverseFuture 发表于 2014-11-5 21:04
是啊,会跟C++搞混,呵呵,用的不熟。

这个倒是,我也经常记混,最好的办法是少学点语言:lol

举报 使用道具

回复 支持 反对
JackIO    发表于 2014-11-15 12:26:47 | 显示全部楼层
vxzv 发表于 2014-11-14 20:06
这个倒是,我也经常记混,最好的办法是少学点语言

少学点语言固然有其好处,但是要是能够花费足够的精力,我想学习广度和深度可以兼得的,但目前来看,我还不具备这个能力啊,所以需要继续努力。:lol

举报 使用道具

回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表