Hẳn rằng khi lập trình chúng ta phải giải quyết rất nhiều bài toán để có được kết quả mong muốn. Và nếu các bạn nhìn lại một chút thì sẽ toá hoả rằng chúng ta sẽ dụng rất nhiều các collection để lưu trữ và xử lý dữ liệu. Show
Các bạn đã sử dụng quá quen thuộc với hai dòng code ở trên? Các bạn đã sử dụng chúng rất nhiều trong các bài tập ở trường? Vậy có bao giờ các bạn tự hỏi liệu hai cách viết trên có khác nhau gì không? Trước khi trả lời câu hỏi trêm, chúng ta sẽ xem sơ qua một chút khái niệm về collection trong java. Collections trong javaCollection trong java là một famework cung cấp các kiến trúc để lưu trữ và sử dụng một nhóm các đối tượng. Trước khi collection được giới thiệu, Để nhóm các đối tượng trong java chúng ta có Arrays, Vectors hay là HashTables. Với mỗi loại trên chúng ta sẽ có các cách thêm và truy cập khác nhau, chúng lại không các interface chung khiến cho các java dev lúc bấy giờ cảm thấy khó chịu. Một hạn chế nữa các method trong ‘Vector’ là final, hiểu đơn giản là bạn sẽ không thể extend ‘Vector’ class để implement các collection tương tự. Để giải quyết các rắc rối trên, các nhà phát triển java đã cho ra đời Collection Framework trong bản JDK 1.2. Hệ thống phân cấp của Collection FrameworkNhìn sơ đồ trên có lẽ chúng ta sẽ thật sự choáng ngợp, thật ra mình cũng vậy. Thế nhưng các bạn đừng lo, hãy xem sơ đồ này như bức tranh toàn cảnh. Chúng ta sẽ đi tìm hiểu những collection hay dùng nhất, sau đó mới tính đến máy cái kia nha. Giới thiệu sơ một xíu. Collection là một interface với những method căn bản như: add(), remove(), contains(), isEmpty(), addAll(), … etc. Collection interface java.util.Collection và Map interface java.util.Map là 2 thành phần chính khác nhau, =) cái này mình thấy phỏng vấn người ta hay hỏi. Như vậy, với việc các class khác như HashSet, ArrayList etc, mặc dù chúng có các đặc thù riêng nhưng chắc rằng chúng sẽ có các method như trên bởi vì chúng đều implement từ collection interface. List: là một danh sách các phần tử có thứ tự, List có thể chứa hai hoặc nhiều các phần tử giống nhau. Set: Là một danh chứa các phần tử không có thứ tự, và không cho phép các phần tử trùng nhau. Map: Lưu trữ các phần tử theo cặp giá trị (key, value), không cho phép có cặp key trùng nhau. Queue: Lưu các phần tử theo công thứ FIFO (First In First Out). Collection với Stream APIStream API được xem là trái tim trong các cú pháp của Java, nếu các bạn có cơ hội làm việc với các dự án Java được tạo từ Java 8 trở đi các bạn sẽ thấy gần như Stream API có mặt ở khắp mọi nơi. Không những hỗ trợ mạnh mẽ các thao tác thông hằng ngày như duyệt collection, lọc dữ liệu, sắp xếp, ánh xạ dữ liệu, cú pháp trong Stream API cũng vô cùng dễ chịu giúp cho việc đọc hiểu mã nguồn dễ dàng hơn. Một Stream API hoạt động trên 1 collection sẽ trải qua 3 đoạn chính:
Trong đó các hoạt động trung gian thao tác trên dữ liệu phù hợp các nhu cầu mà chúng ta cần nhứ sắp xếp, lọc, ánh xạ. Cuối cùng hoạt động đầu cuối sẽ nhận các dữ liệu từ hoạt động trung gian để thao tác ví dụ như duyệt, tính tổng các số nguyên, rút trích dữ liệu. Dưới đây là một ví dụ sử dụng Stream API với Set và List/ import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; class Main { public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7); Set<String> set = new HashSet<>(); set.add("1"); set.add("2");set.add("3"); set.add("4"); int sum = list.stream() .filter(value -> value > 0) .mapToInt(value -> value) .sum(); set.stream().forEach(s -> System.out.println(s)); System.out.println(sum); } }Phần kếtĐến đây, thì có lẽ chúng ta sẽ dễ dàng trả lời câu hỏi ở đầu bài rồi phải không nào? Chúng ta có ArrayList implements <interface> List. thế nên hai cách khai báo ở trên là hoàn toàn hợp lệ. Nhưng mình khuyên nên dùng cách (1) List<String> courses = new ArrayList<>();Vì nó thể hiện rõ phong cách hướng đối tượng của java. Chúng ta có thể linh động hơn trong việc tạo các collection khác nhau implement từ interface List. List<String> arrayList = new ArrayList<>(); List<String> linkedList = new LinkedList<>(); List<StrictMath> vector = new Vector<>();Mục lụcArrayList trong javaLinkedList trong javaHashSet trong javaHashMap trong javaQueue trong java26 tháng 10, 2021 - 803 lượt xem Java Collections đề cập đến một tập hợp các đối tượng riêng lẻ được biểu diễn như một đơn vị duy nhất. Bạn có thể thực hiện tất cả các thao tác như tìm kiếm, sắp xếp, chèn, xóa,... trên Java Collections giống như bạn thao tác với dữ liệu. Trong bài viết này, chúng ta sẽ tìm hiểu từng khía cạnh của Java Collections. Java Collection Framework là gì?Java Collection Framework cung cấp một kiến trúc để lưu trữ và thao tác với một nhóm đối tượng. Một Java Collection Framework bao gồm:
Cấu trúc phân cấp Java Collection FrameworkJava Collection Framework bao gồm các interface và các lớp. Bây giờ, chúng ta hãy xem hệ thống phân cấp java collection framework. Trong hai hình trên, phần màu xanh đề cập đến các interface khác nhau và phần màu vàng xác định lớp. Ngoài các collections, framework còn xác định Map interface và class. Maps lưu trữ các cặp key/value. Mặc dù chúng không phải là collections, nhưng chúng được tích hợp đầy đủ với các collections. Collection interfacesTrong collection interface chúng ta có các interface chính như: List interface, Set, SortedSet, Map và SortedMap. Giờ hãy cùng tìm hiểu tổng quan về các interface đó:
Class CollectionsJava cung cấp một tập hợp các lớp tiêu chuẩn dùng để triển khai các interface collection. Trong class collections chúng ta có rất nhiều loại, giờ hãy cùng tìm hiểu tổng quan về từng loại:
Collection AlgorithmsCollection framework xác định một số thuật toán có thể được áp dụng cho collections và maps. Các thuật toán này được định nghĩa là các phương thức static trong class Collections Sử dụng IteratorKhi muốn duyệt qua các phần tử của một đối tượng nào đó thì thông thường chúng ta hay sử dụng các loại vòng lặp như for, while hoặc do - while. Nhưng đối với Collections thì chúng ta sử dụng một cách mới để duyệt qua các phần tử của một Collection đó là Iterator. Đối với Collections, Iterator là một Interface cung cấp một số các phương thức để duyệt (lặp) qua các phần tử của bất kỳ tập hợp nào. Ngoài ra, Iterator còn có khả năng xóa những phần tử của một tập hợp trong quá trình lặp. Interface Comparator và ComparableJava cung cấp 2 Interface Comparable và Comparator để so sánh và sắp xếp vị trí 2 đối tượng của một Collection. Chi tiết về 2 Interface này chúng ta sẽ tìm hiểu trong các bài viết khác Java Collections framework cho phép lập trình viên truy cập vào các cấu trúc dữ liệu được đóng gói sẵn cũng như các thuật toán để thao tác với chúng. Collection là một đối tượng có thể chứa các tham chiếu đến các đối tượng khác. Các collections interface khai báo các hoạt động coc thể thực hiện trên mỗi loại bộ sưu tập. Các lớp và interfaces của collection framework nằm trong gói java.util Tham khảo Lộ trình Java FullStack dành cho người mới bắt đầu - 7 tháng |