Đề XuấT, 2024

Editor Choice

Sự khác biệt giữa ArrayList và Vector trong Java

Cả ArrayList và Vector đều là các lớp trong hệ thống phân cấp Collection Framework. ArrayList và Vector, cả hai đều được sử dụng để tạo ra một mảng động của các đối tượng trong đó mảng có thể tăng kích thước theo yêu cầu. Có hai điểm khác biệt cơ bản để phân biệt ArrayList và Vector là Vector thuộc về các lớp Legacy mà sau này được tái cấu trúc để hỗ trợ các lớp bộ sưu tập trong khi đó, ArrayList là lớp bộ sưu tập tiêu chuẩn. Một sự khác biệt quan trọng khác là ArrayList không được đồng bộ hóa; Vector được đồng bộ hóa.

Hãy để chúng tôi nghiên cứu một số khác biệt với sự giúp đỡ của Biểu đồ so sánh được hiển thị dưới đây.

Biểu đồ so sánh

Cơ sở để so sánhLập danh sáchVectơ
Căn bảnLớp ArrayList không được đồng bộ hóa.Lớp Vector được đồng bộ hóa.
Lớp kế thừaArrayList là một lớp Collection tiêu chuẩn.Vector là một lớp kế thừa, được thiết kế lại để hỗ trợ lớp bộ sưu tập.
Tuyên bố lớplớp ArrayListlớp Vector
Tái phân bổKhi không được chỉ định, một ArrayList được tăng thêm một nửa kích thước của nó.Khi không được chỉ định, một vectơ được tăng lên gấp đôi kích thước của nó.
Hiệu suấtVì ArrayList không được đồng bộ hóa, nó hoạt động nhanh hơn Vector.Khi Vector được đồng bộ hóa, nó hoạt động chậm hơn ArrayList.
Bảng liệt kê / lặpArrayList sử dụng giao diện Iterator để duyệt qua các đối tượng được lưu trữ trong ArrayList.Vector sử dụng Enumutions cũng như giao diện Iterator để duyệt qua các đối tượng được lưu trữ trong vectơ.

Định nghĩa của ArrayList

ArrayList thuộc danh sách các lớp bộ sưu tập tiêu chuẩn. Lớp ArrayList được định nghĩa bên trong gói java.util, nó mở rộng lớp AbstractList cũng là một lớp bộ sưu tập tiêu chuẩn và nó cũng thực hiện Danh sách, một giao diện được xác định trong Giao diện Bộ sưu tập. Trong Java, một mảng tiêu chuẩn luôn có độ dài cố định. Điều đó có nghĩa là một khi được tạo ra; nó không tự động tăng trưởng hoặc thu nhỏ kích thước. Vì vậy, bạn nên có kiến ​​thức trước về độ dài của mảng bạn đang sử dụng. Nhưng, đôi khi có thể xảy ra rằng độ dài cần thiết được tiết lộ trong thời gian chạy vì vậy, để xử lý loại tình huống này java đã giới thiệu ArrayList.

ArrayList là lớp được sử dụng để tạo động của một mảng chứa các tham chiếu đến các đối tượng. Mảng này có thể tăng kích thước theo yêu cầu. Khai báo lớp như sau:

 lớp ArrayList 

Ở đây, E chỉ định loại đối tượng mà một mảng sẽ giữ. Mảng được tạo có chiều dài thay đổi, và nó tăng và giảm kích thước khi các đối tượng được thêm hoặc xóa khỏi danh sách.

Điều đó có nghĩa là ArrayList không được đồng bộ hóa, nhiều hơn một luồng có thể hoạt động trên mảng cùng một lúc. Ví dụ, nếu một luồng đang thêm một tham chiếu đối tượng vào mảng và một luồng khác sẽ xóa một tham chiếu đối tượng khỏi cùng một mảng cùng một lúc. Việc tạo ra một mảng động bằng cách sử dụng lớp ArrayList:

 ArrayList S1 = new ArrayList (); System.out.println ("Kích thước ban đầu của S1:" + S1.size ()); S1.add ("T"); S1.add ("C"); S1.add ("H"); S1.add (1, "E"); System.out.println ("Sau khi bổ sung S1 có chứa:" + S1); System.out.println ("Kích thước của S1 sau khi thêm:" + S1.size ()); S1.remove ("T"); S1.remove (2); System.out.println ("Sau khi xóa S1 có chứa:" + S1); System.out.println ("Kích thước của S1 sau khi xóa:" + S1.size ()); // Kích thước đầu ra của S1: 0 Sau khi bổ sung S1 chứa: [T, E, C, H]; Kích thước của S1 sau khi thêm: 4 Sau khi xóa S1 chứa: [E, H] Kích thước của S1 sau khi xóa: 2 

Trong đoạn mã trên, bạn có thể thấy rằng; Tôi đã tạo ra một mảng các đối tượng của kiểu chuỗi. Tôi đã thêm một số đối tượng vào mảng S1 bằng phương thức add () và sau đó xóa một số đối tượng bằng phương thức remove (). Bạn có thể quan sát nếu bạn không chỉ định kích thước ban đầu của mảng thì nó sẽ có độ dài '0'. Như bạn có thể thấy mảng phát triển và thu nhỏ kích thước khi bạn thêm và xóa các phần tử.

Định nghĩa của Vector

Vector là một lớp Legacy được tổ chức lại để hỗ trợ lớp bộ sưu tập trong hệ thống phân cấp Bộ sưu tập Khung. Lớp vectơ cũng được định nghĩa trong gói java.util, được mở rộng bởi lớp AbstractList và được giao diện List thực hiện. Lớp Vector được khai báo như sau:

 lớp Vector 

Ở đây, E định nghĩa loại đối tượng sẽ được lưu trữ trong một mảng. Một mảng được tạo bằng lớp Vector có độ dài thay đổi. Nó tăng gấp đôi kích thước của nó nếu mức tăng không được chỉ định. Hãy hiểu việc tạo ra mảng bằng Vector.

 Vector V = Vector mới (1, 1); V.addEuity ("Công nghệ"); V.addEuity ("Sự khác biệt"); System.out.println ("Dung lượng sau 2 lần thêm:" + V.capacity ()); V.addEuity ("Giữa"); V.addEuity ("vectơ"); System.out.println ("Dung lượng hiện tại:" + V.capacity ()); // Công suất đầu ra sau 2 lần thêm: 2 Công suất hiện tại: 4 

Trong đoạn mã trên bạn có thể thấy điều đó, tôi đặc biệt đề cập đến kích thước và giá trị gia tăng trong hàm tạo của Vector tương ứng, trong khi khai báo mảng của các đối tượng chuỗi. Do đó, bạn có thể quan sát rằng khi giới hạn của mảng kết thúc, nó sẽ tăng theo giá trị được cung cấp cho hàm tạo trong khi khai báo.

Sự khác biệt chính giữa ArrayList và vectơ

  1. Nhiều luồng có thể hoạt động trên ArrayList cùng một lúc do đó nó được coi là không đồng bộ . Không giống như ArrayList, chỉ một luồng duy nhất có thể hoạt động trên một vectơ tại một thời điểm; do đó nó được gọi là Đồng bộ hóa .
  2. Trong phiên bản đầu tiên của Java, một số lớp và giao diện sẽ cung cấp các phương thức để lưu trữ các đối tượng mà chúng được gọi là các lớp Legacy Vector là một trong các lớp Java kế thừa. Sau đó, các lớp kế thừa này đã được tổ chức lại để hỗ trợ lớp Collection trong khi đó, lớp ArrayList là Lớp Collection chuẩn.
  3. Khi giới hạn của một mảng được sử dụng đầy đủ và một đối tượng mới được thêm vào bên cạnh mảng đã hết, kích thước của nó tăng lên trong cả hai trường hợp, ví dụ như trong ArrayList cũng như trong Vector, nhưng sự khác biệt là trong ArrayList, nếu không chỉ định kích thước được tăng thêm 50% của mảng hiện tại trong khi đó, trong mảng Vector được tăng gấp đôi kích thước nếu giá trị gia tăng không được chỉ định.
  4. Vector sử dụng Enumutions cũng như Iterator để duyệt qua một mảng trong khi đó, ArrayList chỉ sử dụng iterator để duyệt qua một mảng.
  5. Vì ArrayList không được đồng bộ hóa và nhiều luồng có thể hoạt động trên nó đồng thời hiệu năng của nó tốt hơn Vector mà chỉ có một luồng có thể hoạt động tại một thời điểm.

Điểm tương đồng:

  1. Cả ArrayList và Vector đều được định nghĩa trong gói java.util.
  2. Cả ArrayList và Vector đều mở rộng lớp absractList.
  3. Cả ArrayList và Vector đều thực hiện giao diện List.
  4. Cả ArrayList và vectơ đều được sử dụng để tạo ra một mảng động phát triển theo yêu cầu.
  5. ArrayList và Vector đều giữ các tham chiếu đối tượng.

Phần kết luận:

Tôi kết luận bằng cách nói rằng việc sử dụng ArrayList tốt hơn so với sử dụng Vector vì nó hoạt động nhanh hơn và tốt hơn.

Top