Có phải HashSet<WeakReference<T>>
số Set
tương đương WeakHashMap<T>
không? Nghĩa là, các mục nhập sẽ bị xóa tự động khi chúng không còn được tham chiếu?Đặt tương đương với WeakHashMap?
Nếu không, tương đương là gì?
Có phải HashSet<WeakReference<T>>
số Set
tương đương WeakHashMap<T>
không? Nghĩa là, các mục nhập sẽ bị xóa tự động khi chúng không còn được tham chiếu?Đặt tương đương với WeakHashMap?
Nếu không, tương đương là gì?
Không, nếu một đối tượng tham chiếu bởi một trong những WeakReference
s trong tập được thu gom rác, các WeakReference
sẽ vẫn được đưa vào các thiết lập và sẽ không được gỡ bỏ tự động, nhưng referent
của họ sẽ được null
. A WeakHashMap
sử dụng mã bổ sung để xóa các khóa được tham chiếu yếu khỏi bản đồ khi chúng được thu thập rác.
Một bộ tương đương với một WeakHashMap
là:
Set<T> set = Collections.newSetFromMap(new WeakHashMap<T, Boolean>());
Là một HashSet
cũng sử dụng một HashMap
nội bộ.
BTW: WeakReference
chỉ là một đối tượng trỏ đến đối tượng có thể được thu thập rác mặc dù tham chiếu được giữ bởi WeakReference
. Bản thân WeakReference
sẽ không bị thu gom rác cho đến khi nó không được tham chiếu mạnh ở bất cứ nơi nào nữa giống như tất cả các đối tượng khác.
Đó là câu trả lời tôi đang tìm kiếm. Cảm ơn bạn! –
Tin rằng đây là những gì bạn có thể đang tìm kiếm: http://stackoverflow.com/a/4062950/717932 – dardo
bản sao có thể có của [Tại sao tồn tại WeakHashMap, nhưng WeakSet vắng mặt?] (Http://stackoverflow.com/ question/4062919/why-does-exist-weakhashmap-nhưng-absent-weakset) –
Câu hỏi này không trùng lặp. Câu hỏi khác cố gắng trả lời tại sao không có WeakSet. Nó không cung cấp một tập tương đương, cũng không trả lời xem ví dụ của tôi ở trên có được tính là tương đương hay không. –