2011-09-05 41 views
6

Java định nghĩa một giao diện Set nơi contains() được định nghĩa như sau:Ví dụ được đặt trong Java?

Returns true nếu thiết lập này chứa các yếu tố cụ thể. Thêm chính thức, trả về true nếu và chỉ khi tập hợp này chứa một phần tử e sao cho (o==null ? e==null : o.equals(e)).

Giao diện Collection định nghĩa contains() như sau:

Returns true nếu bộ sưu tập này chứa các yếu tố quy định. Thêm chính thức, trả về true nếu và chỉ khi bộ sưu tập này có chứa tại ít nhất một thành phần e sao cho (o==null ? e==null : o.equals(e)).

Tôi cần một bộ ví dụ Java 'nơi được dựa trên == và không phải equals(). Nói cách khác, một tập hợp các trường hợp khó có hai đối tượng A và B khác nhau trong đó A.equals(B) có thể cùng tồn tại trong cùng một tập hợp này, kể từ A!=B.

Có phải 'một tập hợp cá thể' được phân phối trong Java hoặc trong một số thư viện công cộng không? Tôi không thể tìm thấy bất cứ điều gì, nhưng có thể ai đó biết rõ hơn về SO. Nếu không, tôi sẽ thực hiện nó. Cảm ơn.

Trả lời

13

Không có "tập hợp mẫu" trực tiếp trong JRE.

Nhưng có một IdentityHashMap, thực hiện "bản đồ cá thể" theo thuật ngữ của bạn.

có một phương pháp được gọi là Collections.newSetFromMap() có thể tạo Set từ triển khai Map tùy ý.

Vì vậy, bạn có thể dễ dàng xây dựng dụ của riêng bạn thiết lập như thế này:

Set<MyType> instanceSet = Collections.newSetFromMap(new IdentityHashMap<MyType,Boolean>()); 
+0

+1: Quicker hơn tôi. ;) –

+0

Có vẻ như đây là cơ sở tôi cần cho tập hợp cá thể của mình. Tuyệt quá. Cảm ơn. – JVerstry

+1

OP nên nhớ rằng một 'Set' được thực hiện theo cách này là vi phạm hợp đồng' Set' ... giống như 'IdentityHashMap' vi phạm hợp đồng' Map'. Dù sao, đó là lý do có khả năng là một lớp học như vậy không phải là một phần tiêu chuẩn của khuôn khổ bộ sưu tập. –

1

Bạn chỉ có thể thực hiện phương pháp equals như thế:

public boolean equals(Obect o) { 
    return this == o; 
} 
+0

Đúng, tôi có thể, nhưng tôi muốn giữ cơ hội thực hiện equals() khác nhau. – JVerstry

+1

Ok :-) Chỉ cần nhanh chóng đứng lên, tôi sẽ nói rằng gần như tất cả * bộ sưu tập kiểm tra bình đẳng tham chiếu trước khi cố gắng gọi 'bằng'. – dacwe