本人小白一枚,欢迎大家一起讨论学习,如有错误,还望大家指教。
Arrays用于操作数组的工具类,里面的方法都是静态。
sort(T[] a, Comparator<? super T> c) 根据指定比较器产生的顺序对指定对象数组进行排序。
sort(Object[] a) 根据元素的自然顺序对指定对象数组按升序进行排序。
public class Demo1 {
public static void main(String[] args) {
String[] arr = {"abc", "cc", "kkkk", "aa"};
// 按照默认默认比较器
Arrays.sort(arr);
System.out.println(Arrays.asList(arr));
// 按照自定义比较器排序
Arrays.sort(arr, new MyCompare());
System.out.println(Arrays.asList(arr));
}
}
/**
* 自定义比较器,按长度排序
*/
class MyCompare implements Comparator<String> {
@Override
public int compare(String str1, String str2) {
int num = str1.length() - str2.length();
if (num == 0) {
return str1.compareTo(str2);
}
return num;
}
}
[aa, abc, cc, kkkk]
[aa, cc, abc, kkkk]
asList(T... a) 返回一个受指定数组支持的固定大小的列表。
注意:此方法会将数组变成list集合,但我们知道数组的长度是固定的,所以我们将数组变成集合后,不可以使用集合中的增删方法。如果我们进行增删操作,会发生UnsupportedOperationException。
我们可以把数组变成集合,但我们能不能把集合变成数组呢?java在Collection接口为我们提供了toArray方法。
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Collections.addAll(list, "aaa", "bbb", "ccc");
// 打印集合
System.out.println("集合:" + list);
String[] str = new String[2];
/**
* 指定类型的数组的长度要定义多长呢?
* 当指定类型的数组小于了集合的size,那么该方法内部会创建一个新的数组。
* 该集合的长度为size。
* 当指定类型的数组长度大于了集合的size,就不会创建了数组。而是使用传递进来的数组。
* 所以创建一个刚刚好的数组最优
* 为什么要将集合变成数组呢?
* 为了限定对元素的操作,不需要进行增删了。
*/
// String[] str = list.toArray(new String[list.size()]);
str = list.toArray(str);
// 打印数组
System.out.println("数组:" + Arrays.toString(str));
}
集合:[aaa, bbb, ccc]
数组:[aaa, bbb, ccc]
注意:在使用高级for循环对集合进行遍历时,只能获取集合元素,但是不能对集合进行操作。用迭代器遍历时,迭代器除了遍历,还可以对集合中的元素进行remove操作,如果是用ListIterator,还可以在遍历过程中对集合进行增删改查的操作。