1. 方法列表

还记得 Java 的创建者Arrays为了方便我们使用数组而编写了一个完整的辅助类吗?

他们为收藏做了同样的事情。Java 有一个java.util.Collections类,其中包含许多可用于处理集合的方法。这里只是最有趣的:

方法 描述
addAll(colls, e1, e2, e3, ...)
将元素e1, e2, e3, ... 添加到colls集合中
fill(list, obj)
将传递的列表中的所有元素替换为obj
nCopies(n, obj)
返回对象n的副本列表obj
replaceAll(list, oldVal, newVal)
替换列表中oldVal的所有实例newVallist
copy(dest, src)
将列表中的所有元素复制srcdest列表中
reverse(list)
反转列表。
sort(list)
按升序对列表进行排序
rotate(list, n)
listn元素循环移动列表的元素
shuffle(list)
随机打乱列表中的元素
min(colls)
colls查找集合中的最小元素
max(colls)
colls查找集合中的最大元素
frequency(colls, obj)
确定元素在集合obj中出现的次数colls
binarySearch(list, key)
在排序列表中搜索key并返回相应的索引。
disjoint(colls1, colls2)
true如果集合没有共同的元素则返回
重要的:

许多这些方法本身并不使用ArrayList,HashSetHashMap类,而是使用相应的接口:Collection<T>, List<T>, Map<K, V>

这不是问题:如果一个方法接受一个List<T>,您总是可以将一个 传递给它ArrayList<Integer>,但赋值运算符在相反的方向不起作用。


2.创建和修改集合

Collections.addAll(Collection<T> colls, T e1, T e2, T e3, ...)方法

addAll()方法将元素e1, e2, e3, ... 添加到colls集合中 可以传递任意数量的元素。

代码 控制台输出
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 1, 2, 3, 4, 5);

for (int i: list)
   System.out.println(i);
1
2
3
4
5

Collections.fill(List<T> list, T obj)方法

该方法用该元素替换集合fill()中的所有元素。listobj

代码 控制台输出
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);

Collections.fill(list, 10);

for (int i: list)
   System.out.println(i);
10
10
10

Collections.nCopies(int n, T obj)方法

该方法返回元素副本nCopies()的列表。请注意,返回的列表是不可变的,这意味着您无法更改它!您只能使用它来读取值:nobj

代码 描述
List<String> immutableList = Collections.nCopies(5, "Hello");

ArrayList<String> list = new ArrayList<String>(immutableList);

for(String s: list)
   System.out.println(s);
创建一个包含 5 个Hello字符串的不可变列表
创建一个可变列表list并用列表中的值填充它immutableList

控制台输出:
Hello
Hello
Hello
Hello
Hello

Collections.replaceAll (List<T> list, T oldValue, T newValue)方法

该方法将集合中等于的所有replaceAll()元素替换为。listoldValuenewValue

代码 控制台输出
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);

Collections.replaceAll(list, 2, 20);

for (int i: list)
   System.out.println(i);
1
20
3

Collections.copy (List<T> dest, List<T> src)方法

copy()方法将集合中的所有元素复制srcdest集合中。

如果dest集合开始的时间比src集合长,则集合的剩余元素dest将保持不变。

重要的:
collectiondest必须至少和srccollection 一样长(否则IndexOutOfBoundsException会抛出 an)。
代码 控制台输出
ArrayList<Integer> srcList = new ArrayList<Integer>();
Collections.addAll(srcList, 99, 98, 97);

ArrayList<Integer> destList = new ArrayList<Integer>();
Collections.addAll(destList, 1, 2, 3, 4, 5, 6, 7);

Collections.copy(destList, srcList);

for (int i: destList)
   System.out.println(i);
99
98
97
4
5
6
7


3.元素的顺序

Collections.reverse(List<T> list)方法

reverse()方法颠倒传递列表中元素的顺序。

代码 控制台输出
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 1, 2, 3, 4, 5);

Collections.reverse(list);

for (int i: list)
   System.out.println(i);
5
4
3
2
1

Collections.sort(List<T> list)方法

sort()方法按升序对传递的列表进行排序。

代码 控制台输出
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 11, 2, 23, 4, 15);

Collections.sort(list);

for (int i: list)
   System.out.println(i);
2
4
11
15
23

Collections.rotate(List<T> list, int distance)方法

rotate()方法循环地将传递的列表的元素distance向前移动位置。

代码 控制台输出
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 1, 2, 3, 4, 5, 6, 7, 8, 9);

Collections.rotate(list, 3); // Shift by 3 positions

for (int i: list)
   System.out.println(i);
7
8
9
1
2
3
4
5
6

Collections.shuffle(List<T> list)方法

shuffle()方法随机打乱传递列表的所有元素。每次的结果都不一样。

代码 控制台输出
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 1, 2, 3, 4, 5);

Collections.shuffle(list); // Shuffle the elements

for (int i: list)
   System.out.println(i);
5
2
4
3
1


4. 在集合中查找元素

Collections.min(Collection<T> colls)方法

min()方法返回集合中的最小元素。

代码 控制台输出
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 11, 2, 23, 4, 15);

int min = Collections.min(list);

System.out.println(min);
2

Collections.max(Collection<T> colls)方法

max()方法返回集合中的最大元素。

代码 控制台输出
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 11, 2, 23, 4, 15);

int max = Collections.max(list);

System.out.println(max);
23

Collections.frequency(Collection<T> colls, T obj)方法

该方法统计元素在集合中出现的frequency()次数objcolls

代码 控制台输出
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 11, 2, 23, 4, 15, 4, 2, 4);

int count = Collections.frequency(list, 4);

System.out.println(count);
3

Collections.binarySearch(Collection<T> colls, T obj)方法

该方法在集合中binarySearch()搜索元素。返回找到的元素的索引。如果未找到元素,则返回负数。objcolls

重要的:
在调用该binarySearch()方法之前,必须对集合进行排序(使用Collections.sort())。
代码 控制台输出
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 11, 2, 23, 5, 15, 4, 2, 4);

Collections.sort(list);  // 2, 2, 4, 4, 5, 11, 15, 23

int index = Collections.binarySearch(list, 5);    // 4
System.out.println(index);

int index2 = Collections.binarySearch(list, 15);  // 6
System.out.println(index2);

int index3 = Collections.binarySearch(list, 16); // The element doesn't exist
System.out.println(index3);
4
6
-8

Collections.disjoint(Collection<T> coll1, Collection<T> coll2)方法

如果传递的集合没有任何共同元素,则该disjoint()方法返回。true

代码 控制台输出
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 1, 2, 3, 4, 5, 6, 7);

ArrayList<Integer> list2 = new ArrayList<Integer>();
Collections.addAll(list2, 99, 98, 97);

boolean isDifferent = Collections.disjoint(list, list2);
System.out.println(isDifferent);
true