2016-06-27 13 views
7

Tôi có một danh sách khoảng 100.000 nhân viên trong Java. Bây giờ tôi muốn xóa một đối tượng nhân viên cụ thể khỏi danh sách một cách nhanh chóng. Những cách có thể để làm điều đó mà không cần lặp lại toàn bộ danh sách là gì? (Nếu tôi lặp lại từng đối tượng, so sánh các chi tiết sau đó xóa: kịch bản này mất nhiều thời gian)Làm thế nào để xóa đối tượng Danh sách cụ thể trong Java?

+0

UR_object_List.remove (đối tượng) –

Trả lời

7

Bạn cần tìm phương tiện nhanh chóng. Bạn có thể

  • đã ArrayList được sắp xếp và sau đó thực hiện tìm kiếm nhị phân với Collections.binarySearch O(log N) Lưu ý: thực sự loại bỏ một phần tử từ một ArrayList là O(n) Trong khi LinkedList như O(1) cho loại bỏ, một tìm kiếm nhị phân trên nó sẽ là vô nghĩa tức là chậm hơn nhiều so với O(N)
  • bạn có thể có Tập hợp băm nhân viên thay thế và việc xóa sẽ là O(1) khấu hao. Bạn có thể sử dụng LinkedHashSet nếu bạn muốn giữ lại một số thứ tự như thứ tự chèn.
  • bạn có thể làm cho đối tượng có thể thay đổi và có trường như enabled mà bạn đặt thành false thay vì thực sự xóa đối tượng đó. Bạn có thể loại bỏ nó sau đó là một công việc hàng loạt tại một số thời gian (qua đêm hoặc vào cuối tuần)
+1

@TimBiegeleisen SO không phải là Quora mặc dù https://www.quora.com/Is-it-true-that-after-Brexit-Pluto-will-be-a-planet- ở Anh-một lần nữa;) –

2

Bây giờ tôi muốn xóa một đối tượng người lao động cụ thể từ danh sách ...

Bạn có thể chỉ sử dụng List.remove để làm điều này

... một cách nhanh chóng

Trong thực tế, thậm chí mặc dù việc xóa mục có thể là hoạt động O(1), lặp lại qua toàn bộ thời lượng của danh sách là O(n) và khi bạn bị phản ứng, không phải là rất nhanh.

Tôi cảm thấy rằng vấn đề của bạn sẽ được phục vụ tốt hơn bằng sức mạnh của băm băm. Điều này có thời gian tra cứu và loại bỏ liên tục. Lớp học LinkedHashMap có thể phù hợp với nhu cầu của bạn. Nó duy trì thứ tự chèn giống như một danh sách liên kết, nhưng nó cũng có chèn và xóa thời gian liên tục.

Các vấn đề liên quan