Sự khác biệt giữa Danh sách mảng và Danh sách liên kết
Trước khi chúng ta đi vào sự khác biệt thực tế, hãy cho chúng tôi biết chúng thực sự là gì?
Chúng ta đã bắt gặp khái niệm Set trong toán học và Set ở đây ít nhiều có nghĩa giống nhau. Vâng, nó là một tập hợp các yếu tố và trong hầu hết các trường hợp, một tập hợp các yếu tố tương tự. Bạn có thể thử thêm các yếu tố này vào Tập hợp và thử in để hiểu, cách nó thực sự được lưu trữ.
Nhập vào một bộ: 20, 50, 10, 30.
Nó thực sự được lưu trữ trong Set là 10, 20, 30, 50.
Các yếu tố được sắp xếp ở đây và được lưu trữ không theo thứ tự chèn. Đây là một trong những tính năng của Set mà nó luôn sắp xếp các phần tử trước khi lưu trữ và tất nhiên, có những ngoại lệ đối với nó và một trong số đó là Linkedhashset vì nó duy trì thứ tự chèn của các phần tử.
Theo thuật ngữ máy tính, Bộ bao gồm một số thuộc tính bổ sung như Phương thức và Kế thừa. Các phương thức giống như các hàm và chúng thực hiện một số tác vụ nhất định như thêm, xóa hoặc lặp qua tập hợp các phần tử. Hầu hết chúng ta đều nổi tiếng về thuật ngữ Thừa kế và nó có nghĩa tương tự ở đây. Có, chúng ta có thể kế thừa một Phương thức từ Bộ sưu tập của nó, để nó có thể được sử dụng với Giao diện cài đặt. Một lần nữa chúng ta lại nói về một thuật ngữ mới, tức là Giao diện cài đặt, và nó không có gì khác hơn là toàn bộ các yếu tố bao gồm các Phương thức.
Để hiểu rõ hơn, chúng tôi đã trình bày một Tập hợp với Cú pháp của nó. Từ cú pháp dưới đây, bạn có thể xác định các loại Tập hợp khác nhau, chẳng hạn như Hashset và Treeset.
nhập java.util. *;
lớp công khai Setexample
public static void main (String args [])
int đếm [] = 34, 22,10,60,30,22 25, 17, 76, 12, 88, 57;
Đặt set = new Hashset ();
thử
cho (int i = 0; i < 5; i++)
set.add (tính [i]);
System.out.println (bộ);
Treeset Sắp xếp Seteg = new Treeset (set);
System.out.println (Tại đây chúng tôi có đầu ra được sắp xếp: Rảnh);
System.out.println (sortseteg);
System.out.println (Nhìn vào phần tử đầu tiên: Mạnh + (Số nguyên) được sắp xếp Set.first ());
System.out.println (Mười Nhìn vào phần tử cuối cùng: Sốt + (Số nguyên) sortet.last ());
bắt (Ngoại lệ e)
Đầu ra của đoạn mã trên như sau.
[25, 17, 76, 12, 88]
Ở đây chúng tôi có đầu ra được sắp xếp:
[12, 17, 25, 76, 88]
Nhìn vào yếu tố đầu tiên: 12
Nhìn vào yếu tố cuối cùng: 88
Danh sách mở rộng Bộ sưu tập tương tự như cách Bộ đã làm, nhưng nó duy trì thứ tự chèn. Bạn thử thêm các tên sau vào danh sách và xem cách thêm vào tên đó.
Đầu vào cho Danh sách: John, Nancy, Mary, Alice.
Làm thế nào nó được lưu trữ trong một danh sách: John, Nancy, Mary, Alice.
Chỉ cần lưu ý thứ tự mà chúng được chèn vào. Bạn có thể xác định rằng 'John' là thành phần đầu tiên trong đầu vào cũng như đầu ra và được theo sau theo cùng thứ tự mà tên được chèn vào. Chúng tôi thậm chí có thể coi đây là một trong những thuộc tính chính của Danh sách.
Chúng ta hãy xem xét một vài phương thức của List như ArrayList và LinkedList theo cú pháp dưới đây.
nhập java.util. *;
Bộ sưu tập lớp học công cộngpublic static void main (String [] args)
Liệt kê a1 = new ArrayList ();
a1.add (của John John);
a1.add (miền bầu bí
a1.add (miền Mary Mary);
a1.add (miền Alice Alice);
System.out.println (Các yếu tố ArrayList của liệt kê là);
System.out.print (vặt \ tẻ + a1);Danh sách l1 = new LinkedList ();
l1.add (miền Sil Silio);
l1.add (Hồi Arjun Trực);
l1.add (miền Deep Deepi);
l1.add (miền Susan Susan);
System.out.println ();
System.out.println (Các phần tử LinkedListList là dòng);
System.out.print (Ngày \ t phạm + l1);
Đầu ra của cú pháp trên như sau.
Các phần tử ArrayList là
[John, Nancy, Mary, Alice]
Các phần tử LinkedList
[Silvia, Arjun, Deepika, Susan]
Rất rõ ràng từ đoạn mã trên rằng cả ArrayList và LinkedList đều duy trì thứ tự chèn.
Tập hợp và Danh sách có các phương thức riêng và chúng ta hãy xem xét một vài trong số chúng ở đây.
S.Không | Đặt - Phương thức | Danh sách - Phương pháp |
1. | thêm vào() - Đó là thêm các đối tượng vào một bộ sưu tập. | void add (int index, Object obj) - Nó thêm đối tượng 'obj' vào 'chỉ mục' được chỉ định của danh sách gọi và nó đảm bảo rằng không có phần tử nào được ghi đè bằng cách dịch chuyển các phần tử trước đó. |
2. | thông thoáng() - Nó là để loại bỏ các đối tượng từ một bộ sưu tập. | boolean addAll (chỉ mục int, Bộ sưu tập c) - Nó thêm toàn bộ bộ sưu tập 'c' vào danh sách gọi và tại 'chỉ mục' được chỉ định. Nó cũng đảm bảo rằng không có yếu tố nào được ghi đè. Chúng tôi cũng có thể kiểm tra tính chính xác của hoạt động của nó bằng cách kiểm tra giá trị trả về. Nó trả về 'true' nếu thay đổi thành công nếu không, nó sẽ trả về giá trị 'false'. |
3. | chứa đựng() - Đó là kiểm tra xem Bộ có chứa một đối tượng nào đó trong đó không. Nó trả về giá trị 'true' nếu đối tượng có mặt trong Set. | Đối tượng get (int index) - Nó trả về phần tử hoặc đối tượng tại 'chỉ mục' được chỉ định. |
4. | isEmpty () - Nó là để xác định xem bộ sưu tập có giúp không có yếu tố nào trong đó không. Nó trả về giá trị 'true' nếu không có phần tử. | int last IndexOf (Object obj) - Nó hoạt động tương tự như mặt trái của Chỉ số() Phương pháp. Nó trả về lần xuất hiện cuối cùng của Đối tượng được chỉ định 'obj' và giá trị '1' được trả về nếu không có đối tượng như vậy trong danh sách. Do đó, nó cũng có thể được sử dụng như chứa đựng() Phương thức thiết lập giao diện. |
6. | tẩy() - Đó là loại bỏ một phần tử khỏi bộ sưu tập bằng cách chỉ định nó làm tham số cho phương thức. | ListIterator listIterator () - Nó trả về một iterator về chỉ mục bắt đầu của Danh sách. |
7. | kích thước() - Đó là đếm số lượng đối tượng hoặc thành phần mà bộ sưu tập có. | ListIterator listIterator (int index) - Nó giúp lặp lại thông qua Danh sách gọi bắt đầu từ 'chỉ mục' được chỉ định. |
số 8. | - | Xóa đối tượng (chỉ mục int) - Nó xóa đối tượng tại 'index' đã chỉ định và trả về phần tử bị xóa như kết quả. Nó cũng làm giảm các chỉ số danh sách kết quả để phản ánh việc xóa. |
9. | - | Tập đối tượng (int index, Object obj) - Đó là gán đối tượng 'obj' cho danh sách gọi ở 'chỉ mục' được chỉ định. |
10. | - | Liệt kê danh sách phụ (int start, int end) - Đó là bao gồm các đối tượng từ chỉ mục 'bắt đầu' đến chỉ mục 'kết thúc' trong danh sách đã gọi Phương thức. |
Tập hợp không bao giờ duy trì thứ tự của các phần tử mà chúng được chèn vào trong khi Danh sách không duy trì nó. Có một ngoại lệ đối với quy tắc này đối với LinkedHashset vì nó duy trì thứ tự chèn nhưng các Set khác như Hashset và Treeset sắp xếp các phần tử trước khi lưu trữ. Điều tương tự được mô tả với các ví dụ dưới đây.
Bộ Đầu vào: Mèo, Búp bê, Táo.
Được lưu trữ như: Apple, Cat, Doll.
Danh sách đầu vào: Cat, Doll, Apple.
Được lưu trữ như: Cat, Doll, Apple.
Tập hợp không bao giờ cho phép trùng lặp trong khi Danh sách cho phép. Nếu một giá trị trùng lặp phải được thêm vào danh sách thì nó sẽ bị ghi đè. Nhìn vào các mẫu cho trùng lặp Set và List.
Đặt đầu vào: 10, 20, 20, 50.
Được lưu trữ dưới dạng: 10, 20, 50.
Danh sách đầu vào: 10, 20, 20, 50.
Được lưu trữ như: 10, 20, 20, 50.
Tập hợp chỉ có thể có một giá trị null trong khi Danh sách có thể có nhiều hơn một giá trị null và không bị giới hạn ở bất kỳ số nào.
Đặt đầu vào: null, null, Man, Dog, Máy bay.
Được lưu trữ dưới dạng: null, Dog, Man, Máy bay.
Danh sách đầu vào: null, null, Man, Dog, Máy bay.
Được lưu trữ dưới dạng: null, null, Man, Dog, Máy bay.
Phương thức Iterator hoạt động tốt với cả Set và List trong khi phương thức ListIterator chỉ hoạt động với List. ListIterator có thể được sử dụng để di chuyển về phía trước cũng như lùi qua Danh sách.
Bộ không có lớp kế thừa trong khi giao diện Danh sách có một di sản được gọi là 'vectơ'. Một vectơ sử dụng giao diện List và do đó nó duy trì thứ tự chèn. Do những nỗ lực đồng bộ hóa, hiệu suất của vectơ bổ sung, xóa và cập nhật chậm hơn một chút.
Một vài trong số các triển khai Set là Hashset, LinkedHashset và Treeset. Vài triển khai của Danh sách bao gồm ArrayList và LinkedList.
Việc sử dụng Set và List hoàn toàn phụ thuộc vào yêu cầu duy trì thứ tự chèn. Như chúng ta đã biết rằng một Tập hợp không bao giờ duy trì thứ tự chèn, nó có thể được sử dụng khi thứ tự có tầm quan trọng thấp hơn. Theo cách tương tự, hãy sử dụng Danh sách khi bạn cần duy trì trình tự chèn..
S.Không | Sự khác biệt trong | Bộ | Danh sách |
1. | Thứ tự chèn | Nó duy trì thứ tự chèn. Cái đầu tiên được chèn vẫn ở vị trí đầu tiên và không phân biệt giá trị của nó. | Nó không bao giờ duy trì thứ tự chèn. |
2. | Phương pháp | Nó sử dụng các phương thức như add (), clear (), chứa (), isEmpty (), remove () và size (). | Nó sử dụng các phương thức như add (), addAll (), get (), lastIndexOf (), ListIterator () có hoặc không có tham số, remove (), set () và subList (). |
3. | Bản sao | Nó không bao giờ cho phép trùng lặp và trong trường hợp xuất hiện như vậy, giá trị bị ghi đè. | Nó cho phép trùng lặp. |
4. | Giá trị không | Nó chỉ có thể có một giá trị null tối đa. | Nó có thể có bất kỳ số lượng giá trị null. |
5. | Sử dụng Iterator () & listIterator () | Nó chỉ sử dụng phương thức iterator (). | Nó sử dụng cả iterator () cũng như listIterator (). |
6. | Sự hiện diện của lớp kế thừa | Không có lớp kế thừa. | Nó có lớp Legacy được gọi là vectơ. |
7. | Triển khai | Một vài trong số các cài đặt giao diện Set là Hashset, LinkedHashset và Tree Set. | Một vài trong số các triển khai giao diện Danh sách là LinkedList và ArrayList. |
Hy vọng, chúng tôi đã bao gồm mọi khác biệt có thể có giữa Bộ và Danh sách. Nếu bạn cảm thấy rằng chúng tôi đã bỏ lỡ điều gì đó, xin vui lòng cho chúng tôi biết.