Vector trong java collection.

Cũng 1 thời gian khá lâu rồi mình không viết tiếp tục seri collection trong java rồi. Nay để tiếp tục thì mình sẽ viết về Vector. 2 bài trước thì mình có đã viết về ArrayList và LinkedList rồi. Nếu ai chưa đọc thì có thể ấn vào đâyđây nữa để tìm hiểu lại.

Thì cũng như ArrayList và LinkedList, Vector cũng implements từ interface List nên nó sẽ có những method để tương tác giống như ArrayList và LinkedList.
Về bản chất thì Vector sẽ giống với ArrayList về cách lưu trữ phần tử và đảm bảo thứ tự các phần tử được add vào. Tức là khi bạn add một mảng các phần tử vào Vector thì chúng sẽ được lưu liên tiếp nhau trên ô nhớ và đảm bảo thứ tự add vào của chúng. Ví dụ bạn add 1 mảng các số tự nhiên như bên dưới đây

Thì như các bạn thấy, thứ tự các phần tử sẽ được giữ nguyên như ban đầu.
Vậy tại sao nó lại sinh ra Vector trong khi muốn lưu trữ các phần tử theo danh sách liên tiếp và đảm bảo vị trí thì ta có thể dùng ArrayList ?
Để biết được câu trả lời thì cùng mình tìm hiểu tiếp nhé, tuy có những điểm chung vì đều có thằng cha là List, nhưng trong một gia đình anh chị em ruột vẫn khác nhau được đúng không. Và Vector cũng vậy, nó có những điểm khác và 2 thằng kia không có. Mình sẽ liệt kê chúng ra cho mọi người biết ngay đây.

  • Cơ chế thay đổi mảng của Vector khác so với LinkedList, như bài trước mình có đề cập là khi số lượng phần tử của ArrayList vượt quá khỏi khả năng chứa của nó thì nó sẽ tăng lên 50% là bằng 150% kích thước cũ. Nhưng ở Vector thì con số ấy là 100% tức là gấp đôi hay bằng 200 % kích thước ban đầu.
  • Vector có thể khởi tạo trước độ dài của mảng, mặc định khi khởi tạo với từ khóa new thì Vector có kích thước mảng là 0, sau khi add vào phần tử đầu tiên thì độ dài mảng sẽ được tăng lên thành 10. Nhưng có 1 điều mà ArrayList lẫn LinkedList không làm được đó là set được độ dài của mảng.

Một lưu ý là nếu bạn insert một giá trị mà index của nó lớn hơn độ dài của mảng thì sẽ lập tức bị lỗi như sau.

  • Vector là synchronized còn ArrayList và LinkedList là non-synchronized. có nghĩa là Vector chỉ có thể chạy đơn luồng và không hỗ trợ chạy đa luồng

Vector sẽ không cho phép nhiều hơn 1 Thread được can thiệp vào nó tại đồng thời 1 điểm, điều này đảm bảo cho việc dữ liệu trong Vector sẽ không bị xung đột khi có nhiều Thread tương tác với Vector. Và nó dẫn đến việc Vector sẽ xử lý chậm hơn ArrayList ví nó là synchronized. Tức là, trong môi trường đa luồng, các Threadgiữ nó ở trong trạng thái runnable hoặc non-runnable cho đến khi Thread hiện tại giải phóng đối tượng đó.

  • Ngoài được duyệt bằng Iterator thì Vector còn có thể duyệt được bằng Enumeration.
  • Và 1 điều nữa đó là ArrayList không là một lớp legacy, nó được tạo ra từ phiên bản JDK 1.2 còn Vector là một lớp legacy.

Phiên bản Java đầu tiên không bao gồm Collection Framework. Nó chỉ định nghĩa một vài lớp và interface cung cấp các phương thức để lưu trữ các đối tượng. Khi Collection Framework được thêm vào trong J2SE 1.2, các lớp gốc đã được tái cấu trúc để hỗ trợ các collection interface. Các lớp này còn được gọi là lớp Legacy. Tất cả các lớp và interface Legacy được thiết kế lại bởi JDK 5 để hỗ trợ Generics.

Dưới đây là các Legacy Class được định nghĩa trong package java.util:

  1. Dictionary
  2. HashTable
  3. Properties
  4. Stack
  5. Vector

Mình sẽ không demo lại các method vì như mình nói, nó đều implements từ interface List nên các method nó cũng sẽ có tương tự như việc bận dùng với ArrayList hay LinkedList. Tóm lại thì sau bài học này chúng ta đã biết được Vector là gì, các thức xử lý dự liệu và lưu trữ ra sao. Nó giống và khác gì so với các collection trong List interface khác. Mình sẽ tòm gọn lại thành bảng bên dưới như sau.

ArrayListVector
1) ArrayList là non-synchronized.Vector là synchronized.
2) ArrayList tăng 50% kích thước hiện tại nếu số phần tử vượt quá khả năng chứa của nó.Vector tăng 100% nghĩa là tăng gấp đôi kích thước hiện tại nếu số phần tử vượt quá khả năng chứa của nó..
3) ArrayList không là một lớp legacy, nó được tạo ra từ phiên bản JDK 1.2.Vector là một lớp legacy
4) ArrayList là nhanh hơn vì nó là non-synchronized.Vector là chậm hơn ví nó là synchronized. Tức là, trong môi trường đa luồng, các thread giữ nó ở trong trạng thái runnable hoặc non-runnable cho đến khi thread hiện tại giải phóng đối tượng đó.
5) ArrayList sử dụng Iterator để duyệt các phần tử.Vector sử dụng Enumeration và Iterator để duyệt các phần tử.

Có bất kì thắc mắc hay góp ý nào thì hãy comment cho mình biết, để các bài viết sau được hoàn thiện hơn. Cảm ơn mọi người đã theo dõi blog của mình.

Đăng bởi Đào Văn Đô

Công chúa chỉ hôn con ếch khi biết chắc nó sẽ biến thành hoàng tử, người đẹp chỉ sống với quái vật khi rõ ràng anh ấy vốn là đại gia. Cuộc sống vốn dĩ là vậy, cách người ta đối xử với mình còn tuỳ thuộc xem mình là ai.

One thought on “Vector trong java collection.

Bình luận về bài viết này

Tạo trang giống vầy với WordPress.com
Tham gia