Sự khác nhau giữa Vector và ArrayList - aktvTech - Share your tech knowledge

Recent

Home Top Ad

Responsive Ads Here

Monday, July 8, 2019

Sự khác nhau giữa Vector và ArrayList

ArrayList và Vector đều là implementations của List interface cả 2 đều sử dụng 1 mảng (array) nội bộ để lưu trữ các phần tử. Tuy nhiên, có vài sự khác nhau giữa ArrayList và Vector được đưa ra dưới đây:

1. Giống nhau:

  • Cả hai đều là mảng động - có thể tư tăng kích thước khi không đủ không gian
  • Cả hai đều hỗ trợ iterator và listIterator và cả 2 đều là fail-fast.
  • Cấu trúc các phần tử trong cả hai đều được sắp xếp theo thứ tự liên tục
  • Cả hai đều cho phép chứa các phần tử trùng lấp và rỗng (null)

2. Khác nhau:

ArrayList Vector
Thread-safe Không phải là 1 synchronized collection. Hỗ trợ synchronized. Là 1 thread-safe
Thay đổi kích thước Mỗi lần thay đổi không gian bộ nhớ, ArrayList chỉ cho phép tăng tối đa 50% Mặc định Vector tăng đến 100% kích thước cũ đồng thời cũng cho phép thay đổi bước tăng thông qua contructor Vector(int initialCapacity, int capacityIncrement).
Năng suất ArrayList không được đồng bộ hóa nên không mất thời gian trong xử lý đảm bảo luồng an toàn Trong khi Vector được đồng bộ hóa, do đó nó có một số chi phí trong quản lý / khóa luồng, v.v. nên thời gian xử lý sẽ chậm hơn.
Fail-fast vs Fail-safe ArrayList chỉ cung cấp cơ chế iterators là 1 fail-fast vì thế mọi thay đổi trên ArrayList (thêm xóa) sẽ ném ra ngoại lệ ConcurrentModificationException Vector cung cấp đồng thời iterators và enumeration là 1 fail-safe do đó sẽ không ném ra ngoại lệ ConcurrentModificationException

3. Khi nào thì nên dùng ArrayList và khi nào thì dùng Vector

Tất cả đều phụ thuộc vào yêu cầu của hệ thống. Nếu chúng ta hoạt động trên môi trường đa luồng, và muốn đảm bảo tính consistency của dữ liệu thì Vector là lựa chọn tối ưu nhất.
Năng suất: Vì các hoạt động đồng bộ nên sẽ tốn nhiều thời để xử lý hơn các hoạt động không cần đồng bộ vì vậy nếu xét về khía cạnh hiệu năng thì ArrayList cho kết quả tốt hơn rất nhiều.
Để tối ưu chúng ta vẫn có thể dùng ArrayList mà vần có thể hoạt động trên môi trường đa luồng bằng cách sử dụng util của collection:

List list = Collections.synchronizedList(new ArrayList());
...

//If you wanna use iterator on the synchronized list, use it
//like this. It should be in synchronized block.
synchronized (list) {
  Iterator iterator = list.iterator();
  while (iterator.hasNext())
      ...
      iterator.next();
      ...
}

No comments:

Post a Comment