collection-java

Collections trong Java – Mọi thứ bạn phải biết!

Java Collections Framework là một phần cốt lõi của ngôn ngữ Java. Collections cũng được sử dụng hầu hết trong ngôn ngữ lập trình. Hầu hết các ngôn ngữ hỗ trợ nhiều kiểu collections như List, Set, Queue, Stack…

What is Java Collections Framework?

Collections giống như containers cái mà group các items trong 1 unit duy nhất. Ví dụ, một lọ socola, một danh sách tên…

Collections được sử dụng trong nhiều ngôn ngữ và khi Java ra đời, nó cũng đến với một số Collection là Vector, Stack, Hashtable, Array.

LUYỆN THI CHỨNG CHỈ OCA

Java 1.2 cung cấp Collections Framework là kiến ​​trúc để đại diện và thao tác các Collections trong java theo cách tiêu chuẩn. Java Collections Framework bao gồm các phần sau:

1. Interface

Interface Collections Framework trong Java cung cấp kiểu dữ liệu trừu tượng để đại diện collection.

java.util.Collection là interface root của Collection Framework. Nó nằm trên cùng của hệ thống phân cấp collection framework. Nó chứa một số phương thức quan trọng như size(), iterator(), add(), remove(), clear() mà mọi lớp Collection phải thực hiện.

Một số interface quan trọng khác là java.util.List, java.util.Set, java.util.Queue và java.util.Map. Map là interface duy nhất không kế thừa từ interface nhưng nó là một phần của Collection Framework. Tất cả các interface Collection framework đều có trong gói java.util.

2. Những class Implementation

Java Collection Framework cung cấp những class Implementation cho những interface core collection. Chúng ta có thể sử dụng chúng để ttaoj các kiểu khác nhau về Collection trong chương trình Java.

Một số class collection quan trọng như ArrayList, LinkedList, HashMap, TreeMap, HashSet và TreeSet.

Java 1.5 đã đưa ra các lớp thu thập an toàn theo luồng cho phép chúng tôi sửa đổi Collection trong khi lặp lại chúng. Một số trong số đó là CopyOnWriteArrayList, ConcurrentHashMap, CopyOnWriteArraySet. Các lớp này nằm trong gói java.util.concurrent.

Tất cả các lớp Collections đều có trong package java.util và java.util.concurrent.

3. Algorithms

Thuật toán là phương pháp hữu ích để cung cấp một số chức năng phổ biến như tìm kiếm, sắp xếp và xáo trộn.

Sơ đồ class Collection framework

Biểu đồ lớp bên dưới hiển thị cấu trúc phân cấp của Bộ sưu tập Framework. Để đơn giản, tôi chỉ bao gồm các Interface và lớp thường được sử dụng.

Hệ thống phân cấp các lớp của Bộ sưu tập Java

Lợi ích của Java Collections Framework

Framework Java Collections có những lợi ích sau:

  • Giảm Nỗ lực Phát triển – Nó đi kèm với hầu hết các loại tập hợp phổ biến và các phương pháp hữu ích để lặp lại và thao tác dữ liệu. Vì vậy, chúng ta có thể tập trung nhiều hơn vào logic nghiệp vụ thay vì thiết kế các API thu thập của chúng tôi.
  • Chất lượng tốt hơn – Việc sử dụng các lớp thu thập lõi đã được kiểm tra tốt sẽ làm tăng chất lượng chương trình của chúng tôi hơn là sử dụng bất kỳ cấu trúc dữ liệu nào do nhà phát triển.
  • Khả năng tái sử dụng và khả năng tương tác
  • Giảm nỗ lực duy trì vì mọi người đều biết các lớp API Collection.

API interface collection Java

Các interface collection Java là nền tảng của Java Collections Framework. Lưu ý rằng tất cả interface collection cốt lõi là chung; ví dụ public interface Collection <E>. Cú pháp <E> dành cho Generics và khi chúng ta khai báo Collection, chúng ta nên sử dụng nó để chỉ định loại Đối tượng mà nó có thể chứa. Nó giúp giảm lỗi thời gian chạy bằng cách kiểm tra các Đối tượng tại thời điểm biên dịch.

Để giữ cho số lượng interface collection cốt lõi có thể quản lý được, nền tảng Java không cung cấp các interface riêng biệt cho từng biến thể của từng loại Collection. Nếu một hoạt động không được hỗ trợ được gọi ra, thì việc triển khai Collection sẽ ném ra một UnsupportedOperationException.

1. Interface Collection

Đây là gốc của hệ thống phân cấp Collection. Một tập hợp đại diện cho một nhóm các đối tượng được gọi là các phần tử của nó. Nền tảng Java không cung cấp bất kỳ triển khai trực tiếp nào của interface này.

Interface có các phương thức để cho bạn biết có bao nhiêu phần tử trong Collection (size, isEmpty), để kiểm tra xem một đối tượng đã cho có nằm trong Collection (chứa) hay không, để thêm và xóa một phần tử khỏi Collection(add, remove) và để cung cấp một trình lặp qua Collection (trình lặp).

Interface Collection cũng cung cấp các phương thức hoạt động hàng loạt hoạt động trên toàn bộ Collection – containsAll, addAll, removeAll, retainAll, clear.

Các phương thức toArray được cung cấp như một cầu nối giữa các Collection và các API cũ hơn mong đợi các mảng trên đầu vào.

2. Iterator Interface

Interface Iterator cung cấp các phương thức để lặp qua các phần tử của Collection. Chúng ta có thể lấy instance của iterator bằng phương thức iterator(). Iterator thay thế Enumerationtrong Collection Framework Java. Trình lặp cho phép người gọi xóa các phần tử khỏi tập hợp cơ bản trong quá trình lặp.

3. Set Interface

Set là tập hợp không được chứa các phần tử trùng lặp. Interface này mô hình hóa sự trừu tượng hóa tập hợp toán học và được sử dụng để đại diện cho các tập hợp, chẳng hạn như bộ bài.

Nền tảng Java chứa ba mục đích chung Thiết triển khai: HashSetTreeSet, và LinkedHashSetInterface đặt không cho phép truy cập ngẫu nhiên vào một phần tử trong Bộ sưu tập. Bạn có thể sử dụng trình lặp hoặc vòng lặp foreach để duyệt qua các phần tử của một Tập hợp.

4. List Interface

List là một tập hợp có thứ tự và có thể chứa các phần tử trùng lặp. Bạn có thể truy cập bất kỳ phần tử nào từ chỉ mục của nó. List giống mảng hơn với độ dài động. List là một trong những loại Collection được sử dụng nhiều nhất. ArrayListvà LinkedListlà các lớp thực thi của Interface List.

Interface List cung cấp các phương pháp hữu ích để thêm một phần tử tại một index, remove/replace element dựa trên chỉ mục và để có được một List con bằng cách sử dụng chỉ mục.

List strList = new ArrayList<>(); 
//add at last
strList.add(0, "0"); 
//add at specified index
strList.add(1, "1");
 //replace
strList.set(1, "2"); 
//remove
strList.remove("1");

Lớp Collections cung cấp một số thuật toán hữu ích cho List – sort, shuffle, reverse, binarySearch etc.

5. Queue Interface

Queue là một tập hợp được sử dụng để chứa nhiều phần tử trước khi xử lý. Bên cạnh các thao tác Collection cơ bản, Queue cung cấp thêm các thao tác chèn, trích xuất và kiểm tra.

Hàng đợi thường, nhưng không nhất thiết, sắp xếp các phần tử theo cách FIFO (nhập trước xuất trước). Trong số các trường hợp ngoại lệ là hàng đợi ưu tiên, sắp xếp thứ tự các phần tử theo một bộ so sánh được cung cấp hoặc thứ tự tự nhiên của các phần tử. Dù thứ tự được sử dụng là gì, phần đầu của hàng đợi là phần tử sẽ bị loại bỏ bởi lệnh gọi loại bỏ hoặc thăm dò ý kiến. Trong hàng đợi FIFO, tất cả các phần tử mới được chèn vào cuối hàng đợi.

6. Dequeue Interface

Một tập hợp tuyến tính hỗ trợ chèn và loại bỏ phần tử ở cả hai đầu. Tên dequeue là viết tắt của “hàng đợi hai đầu” và thường được phát âm là “deck”. Hầu hết các triển khai Dequeue không đặt giới hạn cố định về số lượng phần tử mà chúng có thể chứa, nhưng Interface này hỗ trợ các phần tử bị giới hạn dung lượng cũng như các phần tử không có giới hạn kích thước cố định.

Interface này xác định các phương thức để truy cập các phần tử ở cả hai đầu của deque. Các phương thức được cung cấp để chèn, loại bỏ và kiểm tra phần tử.

7. Map Interface

Map là một object ánh xạ các key đến các value. Map không được chứa các key trùng lặp: Mỗi key có thể ánh xạ đến nhiều nhất một value.

Nền tảng Java chứa ba cách triển khai Map có mục đích chung: HashMap, TreeMap và LinkedHashMap.

Các hoạt động cơ bản của Map là put, get, containsKey, containsValue, size và isEmpty.

8. ListIterator Interface

Iterator cho List cho phép người lập trình duyệt qua List theo một trong hai hướng, sửa đổi Listtrong quá trình lặp và có được vị trí hiện tại của trình vòng lặp trong List.

Java ListIterator không có phần tử hiện tại; vị trí con trỏ của nó luôn nằm giữa phần tử sẽ được trả về bởi một lệnh gọi tới trước () và phần tử sẽ được trả về bởi một lệnh gọi tới next ().

9. SortedSet Interface

SortedSet là một Tập hợp duy trì các phần tử của nó theo thứ tự tăng dần. Một số hoạt động bổ sung được cung cấp để tận dụng lợi thế của việc đặt hàng. SortedSet được sử dụng cho các tập hợp có thứ tự tự nhiên, chẳng hạn như List từ và cuộn thành viên.

10. SortedMap Interface

SortedMap duy trì các ánh xạ của nó theo thứ tự khóa tăng dần. Đây là Map tương tự của SortedSet. Map đã sắp xếp được sử dụng cho các bộ sưu tập có thứ tự tự nhiên của các cặp key / value, chẳng hạn như từ điển và danh bạ điện thoại.

Các lớp Collections Java

Framework Java Collections đi kèm với nhiều lớp triển khai cho các Interface. Hầu hết các triển khai phổ biến là ArrayList , HashMap và HashSet. Java 1.5 bao gồm các triển khai Đồng thời; ví dụ ConcurrentHashMap và CopyOnWriteArrayList. Thông thường, các lớp Collections không an toàn cho luồng và trình lặp của chúng chạy nhanh. Trong phần này, chúng ta sẽ tìm hiểu về các lớp tập hợp thường được sử dụng.

1. Lớp HashSet

Java HashSet là phần triển khai cơ bản của Interface Set được hỗ trợ bởi HashMap. Nó không đảm bảo cho thứ tự lặp lại của tập hợp và cho phép phần tử null .

Lớp này cung cấp hiệu suất thời gian không đổi cho các hoạt động cơ bản ( addremovecontainsvà size), giả định các hàm băm phân tán các yếu tố đúng trong xô. Chúng ta có thể đặt công suất và hệ số tải ban đầu cho Collection này. Hệ số tải là thước đo mức độ đầy đủ của Map băm trước khi dung lượng của nó được tự động tăng lên.

2. Lớp TreeSet

Một NavigableSettriển khai dựa trên một TreeMap. Các phần tử được sắp xếp theo thứ tự tự nhiên của chúng hoặc theo thứ tự Comparatorđược cung cấp tại thời điểm tạo đã đặt, tùy thuộc vào phương thức khởi tạo nào được sử dụng.

Việc triển khai này cung cấp chi phí thời gian log (n) được đảm bảo cho các hoạt động cơ bản addremovecontainsvà size).

Lưu ý rằng thứ tự được duy trì bởi một tập hợp (cho dù có cung cấp bộ so sánh rõ ràng hay không) phải nhất quán với bằng nếu nó triển khai chính xác Interface Đặt. (Xem So sánh hoặc So sánh để biết định nghĩa chính xác về nhất quán với bằng.) Điều này là như vậy bởi vì Interface Set được định nghĩa theo phép toán bằng, nhưng một cá thể TreeSet thực hiện tất cả các so sánh phần tử bằng cách sử dụng phương thức CompareTo (hoặc so sánh) của nó, vì vậy hai các phần tử được coi là bằng nhau theo phương pháp này, theo quan điểm của tập hợp, bằng nhau.

3. Lớp ArrayList

Java ArrayList là triển khai mảng có thể thay đổi kích thước của Interface list. Triển khai tất cả các hoạt động List tùy chọn và cho phép tất cả các phần tử, bao gồm cả null. Ngoài việc triển khai Interface List, lớp này cung cấp các phương thức để thao tác kích thước của mảng được sử dụng nội bộ để lưu trữ List. (Lớp này gần tương đương với Vector, ngoại trừ việc nó không được đồng bộ hóa.)

Các hoạt động của trình lặp kích thước, isEmpty, get, set, iterator và list chạy trong thời gian không đổi. Phép toán cộng chạy trong thời gian không đổi được phân bổ, nghĩa là, việc thêm n phần tử cần O (n) thời gian. Tất cả các hoạt động khác đều chạy trong thời gian tuyến tính (nói một cách đại khái). Yếu tố không đổi thấp so với yếu tố để triển khai LinkedList.

4. Lớp LinkedList

Thực hiện List được liên kết kép của các Interface List và Deque. Triển khai tất cả các hoạt động Listtùy chọn và cho phép tất cả các phần tử (bao gồm cả null).

Tất cả các hoạt động thực hiện như mong đợi đối với một List được liên kết kép. Các thao tác lập chỉ mục vào List sẽ duyệt qua List từ đầu hoặc cuối, tùy theo chỉ mục nào gần với chỉ mục được chỉ định.

5. Lớp HashMap

Thực hiện dựa trên bảng băm của Interface Map. Việc triển khai này cung cấp tất cả các thao tác Map tùy chọn và cho phép các giá trị null và khóa null. Lớp HashMap gần tương đương với Hashtable, ngoại trừ việc nó không được đồng bộ hóa và cho phép null. Lớp này không đảm bảo thứ tự của Map.

Việc triển khai này cung cấp hiệu suất không đổi trong thời gian cho các hoạt động cơ bản ( getvà put). Nó cung cấp các hàm khởi tạo để thiết lập công suất ban đầu và hệ số tải cho bộ sưu tập.

6. Lớp TreeMap

Triển khai NavigableMap dựa trên cây Đỏ-đen. Map được sắp xếp theo thứ tự tự nhiên của các khóa của nó hoặc bởi một Bộ so sánh được cung cấp tại thời điểm tạo Map, tùy thuộc vào phương thức khởi tạo nào được sử dụng.

Việc triển khai này cung cấp chi phí thời gian log (n) được đảm bảo cho các hoạt động chứa, get, put và remove. Thuật toán là sự thích nghi của những thuật toán trong Giới thiệu về thuật toán của Cormen, Leiserson và Rivest.

Lưu ý rằng thứ tự được duy trì bởi TreeMap, giống như bất kỳ Map được sắp xếp nào và việc có cung cấp bộ so sánh rõ ràng hay không, phải nhất quán với bằng nếu Map được sắp xếp này triển khai chính xác Interface Map. (Xem So sánh hoặc So sánh để biết định nghĩa chính xác về nhất quán với bằng.) Điều này là như vậy bởi vì Interface Map được định nghĩa theo phép toán bằng, nhưng một Map được sắp xếp thực hiện tất cả các phép so sánh chính bằng cách sử dụng phương pháp CompareTo (hoặc so sánh) của nó, vì vậy hai Các khóa được coi là bằng nhau theo phương pháp này, theo quan điểm của Map đã sắp xếp, là bằng nhau. Hành vi của một Map được sắp xếp được xác định rõ ràng ngay cả khi thứ tự của nó không nhất quán với bằng; nó chỉ không tuân theo hợp đồng chung của Interface Map.

7. Lớp PriorityQueue

Hàng đợi xử lý các phần tử của nó theo thứ tự FIFO nhưng đôi khi chúng ta muốn các phần tử được xử lý dựa trên mức độ ưu tiên của chúng. Chúng ta có thể sử dụng PriorityQueue trong trường hợp này và chúng ta cần cung cấp triển khai Comparator trong khi khởi tạo PriorityQueue. PriorityQueue không cho phép các giá trị rỗng và nó không bị ràng buộc. Để biết thêm chi tiết về điều này, vui lòng truy cập Hàng đợi ưu tiên Java nơi bạn có thể kiểm tra việc sử dụng nó bằng một chương trình mẫu.

Lớp Collection

Lớp Java Collections chỉ bao gồm các phương thức tĩnh hoạt động trên hoặc trả về các tập hợp. Nó chứa các thuật toán đa hình hoạt động trên các bộ sưu tập, “wrappers”, trả về một bộ sưu tập mới được hỗ trợ bởi một bộ sưu tập được chỉ định và một số tỷ lệ cược và kết thúc khác.

Lớp này chứa các phương thức cho các thuật toán khung thu thập, chẳng hạn như tìm kiếm nhị phân , sắp xếp, xáo trộn, đảo ngược, v.v.

Synchronized Wrappers

Trình bao bọc đồng bộ hóa thêm đồng bộ hóa tự động (an toàn luồng) vào một tập hợp tùy ý. Mỗi Interface trong số sáu Interface tập hợp cốt lõi – Collection, Set, List, Map, SortedSet và SortedMap – có một phương thức gốc tĩnh.

public static  Collection synchronizedCollection(Collection c);
public static  Set synchronizedSet(Set s);
public static  List synchronizedList(List list);
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m);
public static  SortedSet synchronizedSortedSet(SortedSet s);
public static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m);

Mỗi phương thức này trả về một Bộ sưu tập được đồng bộ hóa (an toàn theo luồng) được sao lưu bởi bộ sưu tập đã chỉ định.

Unmodifiable wrappers

Các trình bao bọc không thể sửa đổi lấy đi khả năng sửa đổi bộ sưu tập bằng cách chặn tất cả các hoạt động sẽ sửa đổi bộ sưu tập và ném một UnsupportedOperationException. Cách sử dụng chính của nó là;

  • Để làm cho một bộ sưu tập trở nên bất biến sau khi nó đã được xây dựng. Trong trường hợp này, bạn không nên duy trì tham chiếu đến bộ sưu tập sao lưu. Điều này hoàn toàn đảm bảo tính bất biến.
  • Để cho phép một số khách hàng nhất định truy cập chỉ đọc vào cấu trúc dữ liệu của bạn. Bạn giữ một tham chiếu đến bộ sưu tập sao lưu nhưng cung cấp một tham chiếu đến trình bao bọc. Bằng cách này, khách hàng có thể xem nhưng không thể sửa đổi, trong khi bạn duy trì quyền truy cập đầy đủ.
public static  Collection unmodifiableCollection(Collection<? extends T> c);
public static  Set unmodifiableSet(Set<? extends T> s);
public static  List unmodifiableList(List<? extends T> list);
public static <K,V> Map<K, V> unmodifiableMap(Map<? extends K, ? extends V> m);
public static  SortedSet unmodifiableSortedSet(SortedSet<? extends T> s);
public static <K,V> SortedMap<K, V> unmodifiableSortedMap(SortedMap<K, ? extends V> m);

Thread Safe Collections Classes

Java 1.5 Concurrent package ( java.util.concurrent) chứa các lớp thu thập an toàn theo luồng cho phép các tập hợp được sửa đổi trong khi lặp lại. Theo thiết kế, một trình lặp không nhanh và ném ra ConcurrentModificationException. Một số các lớp học CopyOnWriteArrayListConcurrentHashMapCopyOnWriteArraySet.

Thuật toán API Collection

Java Collections Framework cung cấp các triển khai thuật toán thường được sử dụng như sắp xếp và tìm kiếm. Lớp Collections chứa các triển khai phương thức này. Hầu hết các thuật toán này hoạt động trên List nhưng một số trong số chúng có thể áp dụng cho tất cả các loại tập hợp.

1. Sorting

Thuật toán sắp xếp sắp xếp lại một List để các phần tử của nó có thứ tự tăng dần theo một mối quan hệ sắp xếp. Hai hình thức hoạt động được cung cấp. Dạng đơn giản có một List và sắp xếp nó theo thứ tự tự nhiên của các phần tử của nó. Dạng thứ hai của sắp xếp có một Bộ so sánh ngoài một List và sắp xếp các phần tử bằng Bộ so sánh.

2. Shuffling

Thuật toán xáo trộn phá hủy bất kỳ dấu vết thứ tự nào có thể đã có trong List. Nghĩa là, thuật toán này sắp xếp lại List dựa trên đầu vào từ một nguồn ngẫu nhiên sao cho tất cả các hoán vị có thể xảy ra với khả năng như nhau, giả sử một nguồn ngẫu nhiên hợp lý. Thuật toán này rất hữu ích trong việc triển khai các trò chơi may rủi.

3. Searching

Thuật toán tìm kiếm nhị phân tìm kiếm một phần tử được chỉ định trong List được sắp xếp. Thuật toán này có hai dạng. Đầu tiên lấy một List và một phần tử để tìm kiếm (“khóa tìm kiếm”).

Biểu mẫu này giả định rằng List được sắp xếp theo thứ tự tăng dần theo thứ tự tự nhiên của các phần tử của nó.

Dạng thứ hai có một Bộ so sánh ngoài List và khóa tìm kiếm và giả sử rằng List được sắp xếp theo thứ tự tăng dần theo Bộ so sánh được chỉ định.

Thuật toán sắp xếp có thể được sử dụng để sắp xếp List trước khi gọi Tìm kiếm nhị phân.

4. Composition

Các thuật toán tần suất và sự rời rạc kiểm tra một số khía cạnh của thành phần của một hoặc nhiều Bộ sưu tập.

  • tfrequency: đếm số lần phần tử được chỉ định xuất hiện trong bộ sưu tập được chỉ định
  • disjoint: xác định xem hai Bộ sưu tập có rời rạc hay không; nghĩa là, cho dù chúng không có yếu tố nào chung

5. Giá trị tối thiểu và giá trị lớn nhất

Thuật toán tối thiểu và tối đa trả về lần lượt, phần tử tối thiểu và tối đa có trong một Bộ sưu tập được chỉ định. Cả hai hoạt động này đều có hai dạng. Dạng đơn giản chỉ lấy một Tập hợp và trả về phần tử tối thiểu (hoặc tối đa) theo thứ tự tự nhiên của các phần tử.

Tính năng API Collection Java 8

Những thay đổi lớn nhất của Java 8 liên quan đến các API bộ sưu tập. Một số thay đổi và cải tiến quan trọng là:

  1. Giới thiệu về Stream API cho quá trình xử lý tuần tự cũng như song song, bạn nên đọc Hướng dẫn sử dụng Java Stream API để biết thêm chi tiết.
  2. Interface có thể lặp lại đã được mở rộng với phương thức mặc định forEach () để lặp qua một tập hợp.
  3. Các
  4. Interface Lambda Expression và Function hầu hết đều có lợi với các lớp API Collection.

Các thay đổi về API Bộ sưu tập Java 10

  1. Các phương thức List.copyOf, Set.copyOf và Map.copyOf để tạo các tập hợp không thể sửa đổi.
  2. Lớp Collectors nhận được nhiều phương thức khác nhau để thu thập các tập hợp không thể sửa đổi (Sorted, List, Map). Các tên phương thức này là toUnmodifiableList, toUnmodifiableSet và toUnmodifiableMap.

Hãy xem một ví dụ về cách sử dụng các phương thức API Bộ sưu tập Java 10 mới này .

package com.journaldev.collections;
 
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
public class JDK10CollectionFunctions {
 
    public static void main(String[] args) {
 
        // 1. List, Set, Map copyOf(Collection) method
        List<String> actors = new ArrayList<>();
 
        actors.add("Jack Nicholson");
        actors.add("Marlon Brando");
 
        System.out.println(actors);
        // prints [Jack Nicholson, Marlon Brando]
 
        // New API added - Creates an UnModifiable List from a List.
        List<String> copyOfActors = List.copyOf(actors);
 
        System.out.println(copyOfActors);
        // prints [Jack Nicholson, Marlon Brando]
 
        // copyOfActors.add("Robert De Niro"); Will generate
        // UnsupportedOperationException
 
        actors.add("Robert De Niro");
 
        System.out.println(actors);
        // prints [Jack Nicholson, Marlon Brando, Robert De Niro]
 
        System.out.println(copyOfActors);
        // prints [Jack Nicholson, Marlon Brando]
 
        // 2. Collectors class toUnmodifiableList, toUnmodifiableSet, and
        // toUnmodifiableMap methods
        List<String> collect = actors.stream().collect(Collectors.toUnmodifiableList());
        System.out.println(collect);
    }
 
}

Các thay đổi về API Bộ sưu tập Java 11

Một phương pháp mặc định mới toArray(IntFunction<T[]> generator)được thêm vào Interface Collection. Phương thức này trả về một mảng chứa tất cả các phần tử trong bộ sưu tập này, sử dụng hàm trình tạo được cung cấp để phân bổ mảng được trả về.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 
public class JDK11CollectionFunctions {
 
    public static void main(String[] args) {
 
        /*
         * JDK 11 New Method in Collection interface
         * default <T> T[] toArray(IntFunction<T[]> generator) {
         * return toArray(generator.apply(0)); }
         */
 
        List<String> strList = new ArrayList<>();
        strList.add("Java");
        strList.add("Python");
        strList.add("Android");
 
        String[] strArray = strList.toArray(size -> new String[size]);
        System.out.println(Arrays.toString(strArray));
 
        strArray = strList.toArray(size -> new String[size + 5]);
        System.out.println(Arrays.toString(strArray));
 
        strArray = strList.toArray(size -> new String[size * 3]);
        System.out.println(Arrays.toString(strArray));
    }
 
}

Đầu ra:

[Java, Python, Android]
[Java, Python, Android, null, null]
[Java, Python, Android]

Các lớp Collection trong một Nutshell

Bảng dưới đây cung cấp thông tin chi tiết cơ bản về các lớp tập hợp thường được sử dụng.

URL tải xuốngJava Collection Classes

CollectionĐặt hàngTruy cập ngẫu nhiênGiá trị cốt lõiCác phần tử trùng lặpPhần tử rỗngAn toàn chủ đề
ArrayList
LinkedList
HashSet
TreeSet
HashMap
TreeMap
Vector
Hashtable
Properties
Stack
CopyOnWriteArrayList
ConcurrentHashMap
CopyOnWriteArraySet

Tôi hy vọng hướng dẫn này giải thích hầu hết các chủ đề trong khuôn khổ bộ sưu tập Java. Hãy chia sẻ ý kiến ​​của bạn với các bình luận.

Happy learning!!!❤️❤️❤️

HỌC JAVA CORE


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

Bài viết liên quan

Leave a Reply

Your email address will not be published.

TÀI LIỆU DEV WORLD
Cẩm nang phát triển bền vững với nghề lập trình!