Arrays
我们知道集合有其相应的工具类Collections,实际上,对于数组也有其相应的工具类Arrays,里面提供了大量的静态方法以使用。
下面列举一些该类中常用的方法,其中大部分是Arrays类中的,也有一些和数组相关的方法也列举在其中:
1、打印数组:toString()
直接调用某个数组的toString()方法,会输出其Hash值,对我们来说往往是不需要的。想以字符串的形态输出数字,就要用到Arrays的toString(Object[] a)
int[] arr = {1, 2, 3, 4, 5};
String arrStr = Arrays.toString(arr);
System.out.println(arr.toString()); //输出诸如 [I@291aff
System.out.println(arrStr); //输出 [1, 2, 3, 4, 5]
4
1
int[] arr = {1, 2, 3, 4, 5};
2
String arrStr = Arrays.toString(arr);
3
System.out.println(arr.toString()); //输出诸如 [I@291aff
4
System.out.println(arrStr); //输出 [1, 2, 3, 4, 5]
如果想打印多维数组,则使用 Arrays.deepToString(arr)
2、数组转成List:asList()
同样作为数据容器,数组类型因为其容量是在初始化就固定了的,所以很难执行一些添加或删除动作,这时候我们更需要的是一个集合类,没关系,Arrays提供了方法,可以将你有的数组转换为List
String[] arr = {"a", "b", "c"};
ArrayList<String> list = new ArrayList<String>(Arrays.asList(arr));
System.out.println(list); //输出 [a, b, c]
3
1
String[] arr = {"a", "b", "c"};
2
ArrayList<String> list = new ArrayList<String>(Arrays.asList(arr));
3
System.out.println(list); //输出 [a, b, c]
事实上,因为多态的缘故,同样也是可以转Set的:Set<String> set = new HashSet<String>(Arrays.asList(arr));
3、检查数组是否包含某个值:binarySearch()
Arrays中提供了binarySearch方法,分别传入数组和想要查询的元素,返回该找到的第一个元素的索引,没有则返回-1或-(插入点),插入点是索引键将要插入数组的那一个点。
但是这个方法为二分搜索法,故查询前数组必须是sort排序过的,参考《JAVA之数组查询binarySearch()方法详解》
String[] arr = {"a", "b", "c", "a"};
int index = Arrays.binarySearch(arr, "a"); //返回0
System.out.println(index);
3
1
String[] arr = {"a", "b", "c", "a"};
2
int index = Arrays.binarySearch(arr, "a"); //返回0
3
System.out.println(index);
刚才还提到了asList方法,所以结合集合的方法也可以实现检查包含值得目的
String[] arr = {"a", "b", "c"};
if (Arrays.asList(arr).contains("a")) {
System.out.println("It has 'a'. ");
}
4
1
String[] arr = {"a", "b", "c"};
2
if (Arrays.asList(arr).contains("a")) {
3
System.out.println("It has 'a'. ");
4
}
更多数组查询的参考:在Java中如何高效的判断数组中是否包含某个元素
4、数组的拷贝:System.arraycopy()
这不是Arrays中的方法,当我们涉及到数组的复制时,首先不要蠢蠢地直接使用等号去赋值,其次也别使用循环去挨个赋值。System.arraycopy帮你解决这个烦恼
String[] arr = {"a", "b", "c", "a"};
String[] temp = new String[4];
//五个参数分别为(源数组,开始下标,目标数组,目标数组开始下标,复制元素长度)
System.arraycopy(arr, 0, temp, 0, arr.length);
System.out.println(Arrays.toString(temp));
5
1
String[] arr = {"a", "b", "c", "a"};
2
String[] temp = new String[4];
3
//五个参数分别为(源数组,开始下标,目标数组,目标数组开始下标,复制元素长度)
4
System.arraycopy(arr, 0, temp, 0, arr.length);
5
System.out.println(Arrays.toString(temp));
如参数所示,该方法可以选择拷贝任意位置任意数量的元素到另一个新的数组中去
5、集合转成数组:toArray()
这不是Arrays中的方法,而是集合中的方法。集合都有一个toArray()方法可以直接使用进行转换
String[] arr = {"a", "b", "c"};
ArrayList<String> list = new ArrayList<String>(Arrays.asList(arr));
list.add("d");
String[] result = new String[list.size()];
result = list.toArray(result);
System.out.println(Arrays.toString(result));
1
String[] arr = {"a", "b", "c"};
2
ArrayList<String> list = new ArrayList<String>(Arrays.asList(arr));
3
list.add("d");
4
String[] result = new String[list.size()];
5
result = list.toArray(result);
6
System.out.println(Arrays.toString(result));
6、参考链接
更多的时候,为了方便操作,还是将数组转换为了集合进行处理,毕竟初始化就固定了容量的数组真的太难用了。