Java中对数组专门封装了一个工具类Arrays,在平时编程用到的比较多,这里整理下
- asList(arr):返回由指定数组支持的固定大小的列表
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArraysToolsDemo {
public static void main(String[] args) {
/********asList:数组转集合********/
//第一种方法
String[] arr={"Java","is","beautiful"};
List<String> list1=new ArrayList<>(Arrays.asList(arr));
System.out.println(list1);
//第二种方法
String[] name = new String[]{"12","14","sdf","2d"};
List<String> list2 = Arrays.asList(name);
System.out.println(list2);
//集合转回数组 Arrays.toString
List<String> list3=new ArrayList<String>();
list3.add("Java");
list3.add("is");
list3.add("Grace");
/********ArrayList toArray:集合转数组********/
//第一种方法
String[] s1=list3.toArray(new String[0]);
for (String i:s1){
System.out.print(i+" ");
}
//第二种方法
String[] s2=new String[list3.size()];
list3.toArray(s2);
for (String i:s2){
System.out.print(i+" ");
}
}
}
- sort(arr):将指定的数组按照升序排列,无返回值
import java.util.Arrays;
import java.util.List;
public class ArraysToolsDemo {
public static void main(String[] args) {
/********sort:升序排序,无返回值*******/
Integer[] a=new Integer[]{1,2,4,5,61,1,1,2,32,123,1,34,4};
Arrays.sort(a);
List<Integer> list4 = Arrays.asList(a);
System.out.println(list4);
}
}
- binarySearch():使用二进制算法在指定数组中搜索指定值,这里指定数组必须是有序的
import java.util.Arrays;
import java.util.List;
public class ArraysToolsDemo {
public static void main(String[] args) {
/********binarySearch:返回指定数组搜索指定下标*******/
Integer[] a=new Integer[]{12,55,7,3,999,0,78};
//无序数组下标error
int indexerror=Arrays.binarySearch(a,55);
Arrays.sort(a);
//排序数组下标
int index=Arrays.binarySearch(a,3);
List<Integer> list4 = Arrays.asList(a);
System.out.println(list4);
System.out.println(index);
System.out.println(indexerror);
}
}
- equals():判断两个数组是否相等,返回boolean值,比较的参数需要相同类型
import java.util.Arrays;
import java.util.List;
public class ArraysToolsDemo {
public static void main(String[] args) {
/********equals:判断数组是否相等********/
Integer[] a=new Integer[]{1,2,3};
Integer[] b=new Integer[]{1,2,3};
int[] c=new int[]{1,2,3};
int[] f=new int[]{2,3};
Integer[] d=new Integer[]{1};
List<Integer> list4 = Arrays.asList(a);
System.out.println(list4);
System.out.println("a==b: "+Arrays.equals(a,b));
System.out.println("c==f: "+Arrays.equals(c,f));
System.out.println("a==d: "+Arrays.equals(a,d));
}
}
- fill():填充,无返回值,填充后值相同
import java.util.Arrays;
import java.util.List;
public class ArraysToolsDemo {
public static void main(String[] args) {
/********fill:填充*************/
Integer[] a=new Integer[]{1,2,3};
Arrays.fill(a,1313);
List<Integer>list=Arrays.asList(a);
System.out.println(list);
/********toString()************/
System.out.println(Arrays.toString(a));
}
}
- toString():返回指定数组内容的字符串表示,见上面
- copyOf():复制指定数组指定长度
import java.util.Arrays;
import java.util.List;
public class ArraysToolsDemo {
public static void main(String[] args) {
/********System.arraycopy()*************/
//elementData:源数组;index1:源数组中的起始位置;elementData:目标数组;index2:目标数组中的起始位置; length:要复制的数组元素的数量;
//System.arraycopy(elementData, index1, elementData, index2 , length);
//复制的长度不可以越界,否则会报错
int[] a=new int[]{1,2,3,4};
int[] b=new int[10];
System.arraycopy(a,2,b,3,2);
System.out.println(Arrays.toString(b));
/********Arrays.copyOf()***********************/
String[] s=new String[]{"java","hei","sss","skdjfls"};
String[] str=Arrays.copyOf(s,8);
List<String>list=Arrays.asList(str);
System.out.println(list);
}
}
如有不正之处欢迎讨论指正
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2019.12.14 更新
- 举例 原生数据类型的数据的数组无法作为asList的参数,如果是参数,则返回数组对象本身
- 举例 基本数据类型数组如 int[] 转换为集合
- 举例 asList是返回指定数组生成的固定大小的List,不是java.util.ArrayList,而是java.util.Arrays的一个内部类,用final数组来保存元素
- 举例 int[] 数组转List List<Integer> arrlist= Arrays.stream(arrint).boxed().collect(Collectors.toList())
- 举例 List转 int[] 数组 lst.stream().mapToInt(i->i).toArray()
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class AsList {
public static void main(String[] args) {
/********asList:数组转集合********/
//第一种方法
String[] arr = {"Java", "is", "beautiful"};
List<String> list1 = new ArrayList(Arrays.asList(arr));
list1.add("sss");
System.out.println(list1);
// 原生数据类型的数据的数组无法作为AsList的参数 T 是数组元素的 class,原生数据类型没有class属性
int[] arrint = {1, 2, 3};
List lstint = Arrays.asList(arrint);
System.out.println(lstint); // [[I@4554617c] 返回对象本身
// 对于基本数据类型数组如何转换为集合;这里指的是 int[] 转为List<Integer> 目前只发现下面一种直接的方法
// java8及以上版本
// List<Integer> arrlist= Arrays.stream(arrint).boxed().collect(Collectors.toList());
// stream转换成IntStream boxed装箱 再转换成Stream<Integer> 在再用Stream的 collect()
// 包装类数组可以用asList
Integer[] arrinteger={1,2,3};
List lstinteger = Arrays.asList(arrinteger);
System.out.println(lstinteger); // 返回整型数组
//第二种方法
String[] name = new String[]{"12", "14", "sdf", "2d"};
List<String> list2 = Arrays.asList(name);
// asList是返回指定数组生成的固定大小的List,不是java.util.ArrayList,而是java.util.Arrays的一个内部类,用final数组来保存元素
// list2.add("222");
System.out.println(list2);
// 所以要创建一个真正的ArrayList
List<String>list2tmp=new ArrayList<String>(Arrays.asList(name));
list2tmp.add("222");
System.out.println(list2tmp);
//集合转回数组 Arrays.toString
/********ArrayList toArray:集合转数组********/
// lst.stream().mapToInt(i->i).toArray();
List<String> list3 = new ArrayList<String>();
list3.add("Java");
list3.add("is");
list3.add("Grace");
List<Integer> list4=new ArrayList<Integer>();
list4.add(2);
list4.add(4);
// list4.stream().mapToInt(i->i).toArray();
// 先转成stream
//第一种方法
// 0是了为了节省空间,只是说明了返回类型,可以是Integer可以是String
// 相对于下面的,这种是目前最推荐的一种用法
String[] s1 = list3.toArray(new String[0]);
for (String i : s1) {
System.out.print(i + " ");
}
// List<Integer>转int[] 无法采用此方法,必须采用lst.stream().mapToInt(i->i).toArray();
// 但是二位数组List<int[]>转int[][] 可以采用此方法
List<int[]> lst5=new ArrayList<int[]>();
int[] test1=new int[]{1,2};
int[] test2=new int[]{4,5};
int[] test3=new int[]{9,9,2,3};
lst5.add(test1);
lst5.add(test2);
lst5.add(test3);
int[][] test6=lst5.toArray(new int[0][]);
for (int[] test7:test6){
for (int test8:test7){
System.out.println(test8);
}
}
System.out.println();
//第二种方法
String[] s2 = list3.toArray(new String[list3.size()]);
for (String i : s2) {
System.out.print(i + " ");
}
}
}
[Java, is, beautiful, sss]
[[I@4554617c]
[1, 2, 3]
[12, 14, sdf, 2d]
[12, 14, sdf, 2d, 222]
Java is Grace 1
2
4
5
9
9
2
3
Java is Grace
Process finished with exit code 0
- 举例 char数组转换为String ,用String.valueof;
- 举例 Arrays.toString(temp) 返回指定数组内容的字符串表示形式,作用是用来很方便地输出数组,而不用一个一个地输出数组中的元素
char[] temp={'s','g'};
System.out.println(String.valueOf(temp));
String res=Arrays.toString(temp);
System.out.println(res);
System.out.println("sg");
System.out.println(Arrays.toString(temp));
sg
[s, g]
sg
[s, g]