目录
Arrays类
Arrays类常用于操作数组对象,常用功能有两个,一个是排序,一个是转化为 字符串。
1. 转化为字符串输出
一维数组输出:Arrays.toString(data)
//当数组是一维的时候:Arrays.toString(data)
int[] data=new int[]{2,3,4,5};
System.out.println("data="+Arrays.toString(data));
//data=[2, 3, 4, 5]
多维数组输出:Arrays.deepToString(data)
//当数组是一维的时候:Arrays.toString(data)
int[]] data=new int[][]{{2,3,4,5},{2,3,4},{4,3,1}};
System.out.println("data="+Arrays.deepToString(data));
//data=[[2, 3, 4, 5], [2, 3, 4], [4, 3, 1]]
2. 排序
一整型数组为例,进行排序
2.1 一维数组排序(默认为升序):Arrays.sort(data)
//1)从升序排
int[] data=new int[]{2,5,4,1};
Arrays.sort(data);
System.out.println("data="+Arrays.toString(data));
//data=[1, 2, 4, 5]
//1)降序列
int[] data=new int[]{2,5,4,1};
Arrays.sort(data).reverse();
System.out.println("data="+Arrays.toString(data));
//data=[1, 2, 4, 5]
2.2 一维数组排序(自定义排序):Arrays.sort(data)
- 如果需要自定义数组中元素的顺序,需要对sort的比较器Comparator类中的compare方法进行重写,其中Comparator是一个匿名内部类。
//需要对比较器Comparator类中的compare方法进行重写
Integer[] data=new Integer[]{2,5,4,1};
Arrays.sort(data,new Comparator<Integer>(){
@Override
public int compare(Integer a,Integer b){
return b-a;
}
});
System.out.println("data="+Arrays.toString(data));
//可以使用lambda表达式对匿名内部类进行简写
Integer[] data=new Integer[]{2,5,4,1};
Arrays.sort(data,(a,b)-> b-a);
System.out.println("data="+Arrays.toString(data));
2.3 多维数组排序(自定义排序):Arrays.sort(data)
//首先根据数组第一个元素进行升序排列,
//如果相等,则根据第二个元素逆序排列
int[][] data=new int[][]{{3,1,2},{3,2,3},{1,2,3}};
Arrays.sort(data,(a,b)->{
if(a[0]==b[0]) return a[1]-b[1];
return b[0]-a[0];
});
System.out.println("data="+Arrays.deepToString(data));
//data=[[3, 1, 2], [3, 2, 3], [1, 2, 3]]
3. 数组转集合Arrays.asList()(最简单方式)
String[] string={"2","3","a","b"};
List<String> list=new Arraylist<>(Arrays.asList(string));
list.add("3");
System.out.println("list="+lsit);
注意:
- Arrays.asList(string)是对象的方法,传入的必须是对象数组,而不是基本类型,故需要使用包装类。
- Arrays.asList(string),得到的对象是Arrays一个内部类,并不是List集合,故没有修改和添加的功能,需要把他转变为ArrayList集合。
4. (补充知识)匿名内部类(内部类)
4.1 什么是内部类:
1)定义在类中的类
4.2 内部类的作用:
1)可以访问该类定义所作用域的数据,包括private修饰的私有数据。
2)可以解决Java单继承的缺陷。
4.3 什么是匿名内部类:
1)本质上式一个没有名字的局部内部类,定义在方法中,代码块中。
2)作用:方便创建子类对象,最终目的是为了简化代码编写
3)格式如下:
Animal a=new Animal(){
public void run(){
};
5. (补充知识)Lambda表达式
- 简化函数是接口的匿名内部类写法,主要目的是用于简化代码。
- 在对Arrays.sort进行自定义排序就用到了Lambda表达式。