Hiệu suất khôn ngoan, có thực sự là một sự khác biệt lớn giữa việc sử dụng:Bất kỳ sự khác biệt lớn nào giữa việc sử dụng chứa hoặc lặp qua danh sách?
- ArrayList.contains (o) vs foreach | iterator
- LinkedList.contains (o) vs foreach | iterator
Trong số Tất nhiên, đối với vòng lặp foreach | vòng lặp, tôi sẽ phải so sánh rõ ràng các phương thức và trả về true hoặc false cho phù hợp.
Đối tượng tôi so sánh là đối tượng trong đó equals()
và hashcode()
đều được ghi đè chính xác.
EDIT: Bạn không cần phải biết về containsValue, xin lỗi về điều đó. Và vâng, tôi ngu ngốc ... Tôi nhận ra câu hỏi ngu ngốc của tôi là về containKey vs foreach, không bao giờ nghĩ về điều đó, tôi không biết mình đang nghĩ gì. Tôi về cơ bản muốn biết về những điều trên (chỉnh sửa những người khác).
Không phải lo lắng - đó là một câu hỏi thú vị hơn theo cách này. :) – CPerkins
Một lý do khác để sử dụng '.contains (o)' so với vòng lặp là, như đã thấy trong câu trả lời, cách vòng lặp của bạn phụ thuộc vào loại Bộ sưu tập trong khi chứa() hoạt động cho bất kỳ Bộ sưu tập nào. Bạn không quan tâm nếu đó là một ArrayList hoặc một LinkedList, hoặc thậm chí một Danh sách ở tất cả; tuy nhiên bạn vẫn bị mắc kẹt với sự phân đôi '.containsKey (k)' hoặc 'containsValue (v)' với Bản đồ. –
Đối với 'LinkedList',' contains' nhanh hơn gấp đôi so với mỗi (xem http://stackoverflow.com/questions/2804250/linkedlist-contains-execution-speed/) – polygenelubricants