1. Container và bộ sưu tập

Bộ chứa hoặc bộ sưu tập là các lớp cho phép bạn lưu trữ và xử lý nhiều đối tượng cùng một lúc. Bạn đã biết hai loại vùng chứa: mảng và danh sách.

Java có vài tá bộ sưu tập, mỗi bộ lưu trữ các phần tử theo cách cụ thể của riêng nó. Dưới đây là một vài trong số họ:

Bộ sưu tập Lớp học Sự miêu tả
List
ArrayList
Danh sách
LinkedList
danh sách liên kết
Vector
véc tơ
Stack
Cây rơm
Set
HashSet
Bộ
TreeSet
LinkedHashSet
Queue
PriorityQueue
Xếp hàng
ArrayQueue
Map
HashMap
Bản đồ/Từ điển
TreeMap
HashTable

Những cái tên hơi mơ hồ ở đây. Trong hầu hết các ngôn ngữ lập trình, tất cả các cấu trúc dữ liệu này được gọi là tập hợp, nhưng không phải trong Java. Trong Java, một số lớp này triển khai Collectiongiao diện, trong khi những lớp khác thì không.

Theo đó, các bộ sưu tập được chia thành các bộ sưu tập theo nghĩa rộng và các bộ sưu tập theo nghĩa hẹp (chỉ những bộ sưu tập triển khai Collectiongiao diện).

Vì vậy, để tránh nhầm lẫn, khi chúng ta nói về các bộ sưu tập , chúng ta muốn nói đến nghĩa hẹp của từ này, tức là các lớp triển khai Collectiongiao diện. List, Setvà các Queueloại là tất cả các bộ sưu tập. Bộ sưu tập theo nghĩa rộng thường được gọi là thùng chứa . Chúng bao gồm các loại như Mapvà mảng.


2. HashSetbộ sưu tập

Lớp HashSetlà một tập hợp điển hình. Theo nhiều cách, nó tương tự như ArrayListlớp học. Theo một số cách, nó là một phiên bản nguyên thủy hơn.

Bạn có thể tạo một HashSetđối tượng bằng cách sử dụng câu lệnh như:

HashSet<Type> name = new HashSet<Type>();

Đâu Typelà loại phần tử chúng ta sẽ lưu trữ trong bộ HashSetsưu tập.

Lớp HashSetnày có các phương thức như thế này:

Phương pháp Sự miêu tả
void add(Type value)
Thêm valuephần tử vào bộ sưu tập
boolean remove(Type value)
Xóa valuephần tử khỏi bộ sưu tập.
Trả về truenếu có một yếu tố như vậy
boolean contains(Type value)
Kiểm tra xem bộ sưu tập có valuephần tử hay không
void clear()
Xóa bộ sưu tập, loại bỏ tất cả các phần tử
int size()
Trả về số phần tử trong tập hợp

Đây là một ví dụ về việc sử dụng một tập hợp.

Hãy viết một chương trình nói lời tạm biệt với người dùng nếu họ nói xin chào. Để làm cho nó thú vị hơn, chúng tôi sẽ cung cấp cho chương trình của chúng tôi khả năng hiểu "xin chào" bằng một số ngôn ngữ.

Mã số Ghi chú
HashSet<String> set = new HashSet<String>();

set.add("Hallo");
set.add("Hello");
set.add("Hola");
set.add("Bonjour");
set.add("Ciao");
set.add("Namaste");

Scanner console = new Scanner(System.in);
String str = console.nextLine();

if (set.contains(str))
   System.out.println("Goodbye!");
Tạo một HashSetđối tượng lưu trữ Stringcác phần tử.


Chúng tôi thêm lời chào bằng các ngôn ngữ khác nhau vào setbiến.




Đọc một dòng từ bảng điều khiển.


Nếu chuỗi nằm trong tập hợp lời chào của chúng tôi, thì chúng tôi nói lời tạm biệt.


3. Đặt

Bộ Setsưu tập được thiết kế để chứa một tập hợp các phần tử. Đó là lý do tại sao nó được gọi là một Set(bộ). Bộ sưu tập này có ba tính năng.

Các phép toán trên tập hợp

Chỉ có ba điều bạn có thể làm với một tập hợp: thêm các phần tử vào tập hợp, xóa các phần tử khỏi tập hợp và kiểm tra xem tập hợp có chứa một phần tử cụ thể hay không. Đó là nó.

không có đơn đặt hàng

Các yếu tố trong bộ sưu tập này không có chỉ số. Bạn không thể lấy một phần tử theo chỉ mục hoặc ghi giá trị vào bộ sưu tập tại một chỉ mục cụ thể. Một tập hợp không có get()set()phương pháp.

yếu tố độc đáo

Tất cả các yếu tố trong một tập hợp là duy nhất. Không giống như một danh sách, một tập hợp chỉ có thể chứa một thể hiện của một phần tử. Một đối tượng có trong tập hợp hoặc không - không có tùy chọn thứ ba. Bạn không thể thêm màu đen ba lần vào một tập hợp màu. Nó ở đó hoặc không.

Tìm phần tử

Khi bạn thêm một phần tử mới, xóa một phần tử hoặc kiểm tra xem một phần tử có tồn tại trong một tập hợp hay không, quá trình tìm kiếm phần tử đó sẽ được thực hiện trong phương thức. Phần tử đã truyền được so sánh với các phần tử của bộ sưu tập trước bởi hashCode(), sau đó nếu các giá trị được trả về bởi hashCode()match, by equals().



4. So sánh các bộ sưu tập: ListvsSet

Hãy so sánh hai loại bộ sưu tập: ListSetChúng tôi sẽ xem xét những điểm khác biệt chính khi loại này có lợi hơn loại kia và ngược lại.

Hãy thử so sánh Danh sách và Tập hợp bằng cách sử dụng đồ chơi làm ví dụ.

Bộ Listsưu tập (danh sách) giống như một bộ đồ chơi được sắp xếp dọc theo bức tường trong phòng chơi. Bạn có thể thêm một món đồ chơi vào cuối danh sách. Nếu thực sự cần, bạn cũng có thể nhét nó vào giữa (nhưng một số đồ chơi hiện có sẽ phải di chuyển).

Mỗi đồ chơi có một chỉ số. Bạn có thể tham khảo một đồ chơi theo chỉ số của nó và cũng có thể thay thế đồ chơi số 7 bằng đồ chơi số 13. Bạn có thể xóa đồ chơi số 4 khỏi danh sách. Cuối cùng, bạn có thể tìm hiểu chỉ số của từng đồ chơi trong danh sách.

Bộ Setsưu tập (bộ) giống như một đống đồ chơi ở giữa sàn nhà. Bạn có thể thêm đồ chơi vào đống và bạn có thể lấy đồ chơi ra khỏi đống. Nhưng những đồ chơi này không có chỉ số cố định liên quan đến chúng.

Hoặc giả sử bạn đang chọn một món đồ chơi cho ngày sinh nhật của con bạn. Đầu tiên, bạn nghĩ xem liệu anh ấy đã có đồ chơi chưa. Tất cả đồ chơi mà anh ấy đã có tạo thành một bộ đồ chơi mà bạn sẽ không chọn mua.

Từ quan điểm này, bạn có thể thấy rằng thứ tự của đồ chơi trong một bộ "đồ chơi đã tồn tại" không quan trọng, cũng không quan trọng nếu cậu bé sinh nhật có hai trường hợp của một món đồ chơi cụ thể. Bạn không quan tâm đến thứ tự hoặc số lượng của từng món đồ chơi. Điều bạn quan tâm là biết từng đồ chơi độc đáo tồn tại trong bộ.

Đối với những trường hợp như thế này, bạn cần Settập hợp. Triển khai phổ biến nhất của nó là HashSetlớp.