簡體   English   中英

Java Map.Entry和TreeSet

[英]Java Map.Entry and TreeSet

我已經創建了一個TreeSet,並試圖向其中添加一個Map.Entry。 但這不會編譯。 我究竟做錯了什么?

TreeSet<Map.Entry<String, Integer>> treeSet = new TreeSet<Map.Entry<String, Integer>>();

treeSet.add( Map.Entry<String, Integer>("Text string...", 123) );

我不知道您為什么要實例化Map.Entry 我想您可以只使用TreeMap

即使,如果您願意,也可以像這樣實例化AbstractMap.SimpleEntry

Map.Entry<String,Integer> entry =
    new AbstractMap.SimpleEntry<String, Integer>("exmpleString", 42);

請注意, Map.Entry是一個接口。 哦! 當然,正如@Louis在注釋中正確指定的那樣, Map.Entry沒有實現Comparable ,因此您將無法將其添加到TreeSet

但是,您可以創建此接口的自己的實現,使該實現Comparable<Map.Entry<K, V>> ,而改用它。


但是正如我所說,您可以使用TreeMap ,並使用其entrySet()方法,該方法將為您提供Set<Map.Entry<K, V>>

SortedMap<String, Integer> map = new TreeMap<>();
Set<Map.Entry<String, Integer>> set = map.entrySet();

http://docs.oracle.com/javase/7/docs/api/java/util/Map.Entry.html

映射條目(鍵值對)。 Map.entrySet方法返回地圖的集合視圖,該地圖的元素屬於此類。 獲取對地圖條目的引用的唯一方法是從此collection-view的迭代器中進行。 這些Map.Entry對象僅在迭代期間有效。 更正式地講,如果迭代器返回了該條目后,則修改了映射表,則映射表的行為是不確定的,除非通過映射表項上的setValue操作。

換句話說-您無法做您想做的事情。 正如Rohit Jain指出的那樣,您可以使用AstractMap.simpleEntry(..)做類似的事情,但在我看來,在這個世界上很少有用例可以作為“好的”解決方案。

相反,如果您要將鍵/值對存儲在TreeSet ,則需要創建自己的Object。 就是說-為什么不只使用TreeMap或類似的地圖?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM