【Java工具类】Collections、Arrays用法与注意事项

Collections

排序操作

在这里插入图片描述
对于sort的说明:我们希望按照字符串的长度大小排序。可以传入一个比较器。

Collections.sort(list, new Comparator(){
	@Override
	public int compare(Object o1,Object o2) {
	    //可以加入校验代码
		return ((String)o1).length() - ((String)o2).length();
	}
});

lambda表达式对sort的简化

注意点和Arrays.sort的方法相同,也是要明确好类型,否则报错。
在这里插入图片描述

查找、替换

在这里插入图片描述

说明

  • Collections.max()里是可以加入比较器的
  • copy方法如果dest集合size小于src的size,会报错。
  • 为了完成一个完整拷贝,我们需要先给dest 赋值,大小和list.size()一样
    在这里插入图片描述

Arrays

在这里插入图片描述
在这里插入图片描述

sort说明

  • 因为数组是引用类型,所以通过sort排序后,会直接影响到实参arr
  • 可以传入一个比较器来实现订制排序
  • 调用定制排序时,传入两个参数(1)排序的数组arr
  • (2)实现了Comparator接口的匿名内部类,要求实现compare方法
  • Arrays.sort(arr);//默认排序方法
  • //定制排序
Arrays.sort(arr, new Comparator() {
	@0verride
	public int compare(Object o1,Object o2){
		Integer i1 = (Integer)o1;
		Integer i2 = (Integer)o2;
		return i2 - i1;
	}
});

lambda表达式对sort的简化

力扣题179、最大数
当时看到这个题目,用的lambda表达式对sort的比较器简化了一下,所以就顺便记下。记住以下的要点

  • 这里放入的必须是类,如果是基本类型,则需要其对应的包装类
  • 参数只要写参数名就行了。在这里插入图片描述
    再看原本的sort方法,lambda表达式简化了太多东西!实在好用。

binarySearch说明

  • binarySearch通过二分搜索法进行查找,要求必须排好。如果是无序的,不能使用此方法
  • 如果数组中不存在该元素,就返回负数return -(low + 1); // key not found。low代表应该存在的位置
Integer[] arr = {1290,123567};
int index = Arrays.binarySearch(arr,92);
System.out.println( "index=" + index);
//比如这里,92>90,92应该是在下标为3,但返回-(3+1)

copyOf说明

  • 从arr数组中,拷贝arr.length个元素到newArr数组中Integer[] newArr = Arrays.copy0f(arr,arr.length)
  • 如果拷贝的长度> arr.length 就在新数组的后面增加null
  • 如果铂贝长度<0就抛出异常NegativeArraySizeException
  • 该方法的底层使用的是System.arraycopy()

fill、equals说明

  • fill(arr,num)数组的填充
Integer[] num = new Integer[]{9,3,2};
//使用99去填充 num数组,可以理解成是替换原理的元素
Arrays.fill(num,99);
System.out.println("==num数组填充后==");
System.out.println(Arrays.toString(num));
//输出为[99,99,99]
  • equals(arr1,arr2)比较两个数组元素内容是否完全一致。一样则返回true
    • 其中的一样代表的是元素顺序、数量必须完全一致。

asList说明

  • asList(arr)将一组值,转化为list
  • 返回的asList编译类型 List(接口)
  • asList运行类型java.util.Arrays#fArrayList,是Arrays类的静态内部类private static class ArrayList extends AbstractList implements RandomAccess,java.io.Serializable
int[]arr1=new int[] {1,2,3,4,5,5,6};
Integer[]arr2=new Integer[] {1,2,3,4,5,5,6};
System.out.println(Arrays.asList(arr1));
System.out.println(Arrays.asList(arr1).getClass());
System.out.println(Arrays.asList(arr2));
System.out.println(Arrays.asList(arr2).getClass());

在这里插入图片描述
所以这里一般不要用int型转换集合,要用其包装类,其余基本数据类型也是如此

注意事项

  1. 如果将数组转化成集合,那么这个集合是不能进行修改的,比如add、remove,但是排序还是可以的,比如用Collections.sort()
public static void main(String[] args) {
	Integer[]arr2=new Integer[] {1,2,3,4,5,5,6};
	List list=Arrays.asList(arr2);
	System.out.println(list);
	list.add(8);
	list.remove(0);
	System.out.println(list);
}

在这里插入图片描述

  1. 如果实在想对转化的集合操作的话,可以新建立一个集合。
public static void main(String[] args) {
	Integer[]arr2=new Integer[] {1,5,3,4,5,5,6};
	List list=Arrays.asList(arr2);
	List list2=new ArrayList<>(list);
	list2.add(8);
	System.out.println(list);
	System.out.println(list2);
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值