1. Danh sách các phương pháp

Hãy nhớ rằng những người tạo ra Java đã viết cả một lớp trợ giúp được gọi Arrayslà để thuận tiện cho chúng ta khi làm việc với mảng?

Họ đã làm điều tương tự cho các bộ sưu tập. Java có một java.util.Collectionslớp có rất nhiều phương thức hữu ích để làm việc với các tập hợp. Đây chỉ là những điều thú vị nhất:

phương pháp Sự miêu tả
addAll(colls, e1, e2, e3, ...)
Thêm các phần tử e1, e2, e3, ... vào bộ collssưu tập
fill(list, obj)
Thay thế tất cả các phần tử trong danh sách đã chuyển bằngobj
nCopies(n, obj)
Trả về danh sách ncác bản sao của objđối tượng
replaceAll(list, oldVal, newVal)
Thay thế tất cả các phiên bản oldValwith newValtrong listdanh sách
copy(dest, src)
Sao chép tất cả các phần tử từ srcdanh sách vào destdanh sách
reverse(list)
Đảo ngược danh sách.
sort(list)
Sắp xếp danh sách theo thứ tự tăng dần
rotate(list, n)
Dịch chuyển theo chu kỳ các phần tử của listdanh sách theo ncác phần tử
shuffle(list)
Xáo trộn ngẫu nhiên các phần tử trong danh sách
min(colls)
Tìm phần tử nhỏ nhất trong collstập hợp
max(colls)
Tìm phần tử lớn nhất trong collstập hợp
frequency(colls, obj)
Xác định số lần objphần tử xuất hiện trong collsbộ sưu tập
binarySearch(list, key)
Tìm kiếm keytrong danh sách đã sắp xếp và trả về chỉ mục tương ứng.
disjoint(colls1, colls2)
Trả về truenếu các bộ sưu tập không có phần tử chung
Quan trọng:

Nhiều phương thức trong số này không sử dụng các lớp ArrayList, HashSetHashMapmỗi se, nhưng với các giao diện tương ứng: Collection<T>, List<T>, Map<K, V>.

Đây không phải là vấn đề: nếu một phương thức chấp nhận một List<T>, bạn luôn có thể chuyển nó một ArrayList<Integer>, nhưng toán tử gán không hoạt động theo hướng ngược lại.


2. Tạo và sửa đổi bộ sưu tập

Collections.addAll(Collection<T> colls, T e1, T e2, T e3, ...)phương pháp

Phương addAll()thức thêm các phần tử e1, e2, e3, ... vào collstập hợp Có thể truyền bất kỳ số lượng phần tử nào.

Mã số Đầu ra bảng điều khiển
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)phương pháp

Phương fill()thức thay thế tất cả các phần tử của bộ listsưu tập bằng objphần tử.

Mã số Đầu ra bảng điều khiển
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)phương pháp

Phương nCopies()thức trả về một danh sách ncác bản sao của objphần tử. Lưu ý rằng danh sách trả về là bất biến, có nghĩa là bạn không thể thay đổi nó! Bạn chỉ có thể sử dụng nó để đọc các giá trị:

Mã số Sự miêu tả
List<String> immutableList = Collections.nCopies(5, "Hello");

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

for(String s: list)
   System.out.println(s);
Tạo danh sách 5 Hellochuỗi không thay đổi
Tạo một chuỗi có thể thay đổi listvà điền vào đó các giá trị từ immutableListdanh sách.

Đầu ra bảng điều khiển:
Hello
Hello
Hello
Hello
Hello

Collections.replaceAll (List<T> list, T oldValue, T newValue)phương pháp

Phương replaceAll()thức thay thế tất cả các phần tử trong bộ listsưu tập bằng oldValuevới newValue.

Mã số Đầu ra bảng điều khiển
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)phương pháp

Phương copy()thức sao chép tất cả các phần tử của srcbộ sưu tập vào bộ destsưu tập.

Nếu destbộ sưu tập bắt đầu dài hơn srcbộ sưu tập, thì các phần tử còn lại của destbộ sưu tập sẽ vẫn còn nguyên vẹn.

Quan trọng:
Bộ destsưu tập phải dài ít nhất bằng srcbộ sưu tập (nếu không, một bộ sưu tập IndexOutOfBoundsExceptionsẽ bị ném).
Mã số Đầu ra bảng điều khiển
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. Thứ tự của các phần tử

Collections.reverse(List<T> list)phương pháp

Phương reverse()thức đảo ngược thứ tự của các phần tử trong danh sách đã truyền.

Mã số Đầu ra bảng điều khiển
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)phương pháp

Phương sort()thức sắp xếp danh sách đã truyền theo thứ tự tăng dần.

Mã số Đầu ra bảng điều khiển
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)phương pháp

Phương thức này rotate()sẽ dịch chuyển theo chu kỳ các phần tử của danh sách đã truyền theo distancecác vị trí về phía trước.

Mã số Đầu ra bảng điều khiển
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)phương pháp

Phương shuffle()pháp xáo trộn ngẫu nhiên tất cả các phần tử của danh sách đã thông qua. Kết quả là khác nhau mỗi lần.

Mã số Đầu ra bảng điều khiển
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. Tìm phần tử trong tập hợp

Collections.min(Collection<T> colls)phương pháp

Phương min()thức trả về phần tử tối thiểu trong bộ sưu tập.

Mã số Đầu ra bảng điều khiển
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)phương pháp

Phương max()thức trả về phần tử lớn nhất trong tập hợp.

Mã số Đầu ra bảng điều khiển
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)phương pháp

Phương frequency()thức đếm số lần objphần tử xuất hiện trong collstập hợp

Mã số Đầu ra bảng điều khiển
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)phương pháp

Phương binarySearch()thức tìm kiếm objphần tử trong collsbộ sưu tập. Trả về chỉ mục của phần tử được tìm thấy. Trả về số âm nếu không tìm thấy phần tử.

Quan trọng:
Trước khi gọi binarySearch()phương thức, bộ sưu tập phải được sắp xếp (sử dụng Collections.sort()).
Mã số Đầu ra bảng điều khiển
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)phương pháp

Phương disjoint()thức trả về truenếu các bộ sưu tập đã truyền không có bất kỳ phần tử chung nào.

Mã số Đầu ra bảng điều khiển
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