CodeGym /Java Course /Module 1 no mu /Collections——一個輔助類

Collections——一個輔助類

Module 1 no mu
等級 18 , 課堂 3
開放

1. 方法列表

Arrays還記得 Java 的創建者為了方便我們使用數組而編寫了一個完整的輔助類嗎?

他們為收藏做了同樣的事情。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)
將列表中的所有元素複製src到列表dest
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

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION