2010-08-21 27 views
15

Tôi muốnLinkedHashSet or ArrayList

  1. Tránh mục trùng lặp được chèn vào.
  2. Khi tôi lặp qua lớp bộ sưu tập, mục được trả lại giống như thứ tự chèn.

Tôi có thể biết điều gì tôi nên cân nhắc, để chọn ArrayList (thực hiện rõ ràng chứa kiểm tra trước khi chèn) hoặc LinkedHashSet?

Cảm ơn.

Trả lời

18

Chắc chắn sử dụng LinkedHashSet. Nó được làm cho những gì bạn cần. Tìm kiếm toàn bộ ArrayList mỗi lần bạn cần chèn thứ gì đó sẽ là sát thủ hiệu suất (O (n) mỗi lần))

+0

Dĩ nhiên hiệu suất sẽ phụ thuộc vào kích thước, tần suất hoạt động, mức sử dụng bộ nhớ, v.v. –

4

Sử dụng LinkedHashSet nếu bạn không muốn chèn các mục trùng lặp.

+0

Và nó cũng giữ gìn trật tự chèn http://download.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html – crowne

2

A LinkedHashSet dường như phù hợp với hóa đơn một cách hoàn hảo.

Khi bạn xây dựng các đối tượng của riêng mình và dự định sử dụng chúng trong Bộ sưu tập như LinkedHashSet tại đây. Đừng quên ghi đè cả hai số equalshashcode cho mặt hàng bạn sẽ lưu trữ trong đó.

2

Vui lòng kiểm tra này ra: http://wiki3.cosc.canterbury.ac.nz/images/e/e9/JavaCollections.png

LinkedHashSet là những gì bạn cần, bởi vì đó là một thực hiện các Set giao diện. Set có một thói quen rất thú vị: nó không cho phép các bản sao theo mặc định. Vì vậy, chúng tôi đã thực hiện xong với 1.

Điều gì về 2? Chúng tôi biết rằng chúng tôi cần một trong các cài đặt Bộ, nhưng điều đó?

HashMap - bạn có thể lưu trữ cặp K, V nhưng không có thứ tự.

TreeSet - đây là giải pháp chậm nhất, vì nó sử dụng phương pháp compareTo để giữ cho mọi mục được sắp xếp và sắp xếp. Đây là lý do tại sao bạn có thể vượt qua một so sánh với nó, khi bạn đang xây dựng một TreeSet.

LinkedHashSet - Cung cấp lại các phần tử theo thứ tự INSERTING chúng. Đây là phiên bản đặt hàng của một HashSet.

hãy tìm một mô tả mát mẻ ở đây: http://java67.blogspot.co.uk/2014/01/when-to-use-linkedhashset-vs-treeset-vs-hashset-java.html?_sm_au_=iVVMtMLHSDQ5P0P7