2012-01-18 13 views
1

マップの最後と最初のキー/値を取得するにはどうすればよいですか?たとえば :マップの最後の値を取得

Map<String,Integer> ret = new HashMap<String,Integer>(); 

そしてこれはRETの値である:キーが注文されていないので、あなたがHashMapでそれを行うことはできません

{33=1, 12=2, 21=2, 93=2, 48=9, 68=10} 
+4

「HashMap」は順序付けされていないので、「first」と「last」は実際に何も意味しません。 – tzaman

+3

[地図の最後のエントリにアクセスする]の複製が可能です(http://stackoverflow.com/questions/3527216/accessing-the-lastentry-in-a-map) –

+0

@TJCrowderありがとう:)私はちょうどもう少し詳しく解答を書いてください。 – tzaman

答えて

4

。あなたが不運ある場合は、基本的にランダムな要素を取得します全く定義された順序がないので

public <K,V> Map.Entry<K,V> getLast(LinkedHashMap<K,V> map) { 
    Iterator<Map.Entry<K,V>> iterator = map.entrySet().iterator(); 
    Map.Entry<K, V> result = null; 
    while (iterator.hasNext()) { 
     result = iterator.next(); 
    } 
    return result; 
} 
1

:あなたは、このメソッドを使用して最後の要素を取得することができますLinkedHashMap

を使用することを検討してください。他

あなたが行くことができる方法のHashMap - > getEntrySet - >内のtoArray - >取得(サイズ-1)

2

それは区別するために(またはそれ以上のような意味がありません)ことはできません「最初」それはHashMapになると「最後」です。広告掲載オーダーを保持する場合は、LinkedHashMap<K,V>を使用します。しかし、もう一度、あなたの質問を精緻化して、これを要求する正確なユースケースをお知らせください。

4

HashMapは、順序付けされていないマップなので、「最初」または「最後」という概念はありません。
挿入する順序を保持するマップが必要な場合は、LinkedHashMapを使用して、entrySet()メソッドを反復して最初と最後の値を選択できます。
キーの自然順序付け(またはComparator)によって挿入されたエントリを注文するSortedMapインターフェイス(TreeMap impl。)を使用することもできます。

+0

*キーサイズでエントリを挿入します*キーサイズで???私はそれを言いたい。 +1の残りの部分は –

+0

@SeanPatrickFloyd - あなたはどんな言葉をお勧めしますか? – tzaman

+0

からTreeMap javadocs: "マップは、キーの自然順序付けに従って、またはマップ作成時に提供されたコンパレータによってソートされます。"キーサイズについては何もない –

1

技術を使用していない限り、あなたは、ビアマップから最初のオブジェクトを取得することができます

Map.Entry<Integer,Integer> entry = map.entrySet().iterator().next(); 

そして最後にvia:

Iterator<Map.Entry<Integer,Integer>> iter = map.entrySet().iterator(); 
Map.Entry<Integer,Integer> entry = null; 
while(iter.hasNext()) { 
    entry = iter.next(); 
} 
// now you have the "last" item in the map stored in 'entry' 

しかし、これは他の回答でも言及されているように、これはHashMapの意味ではありません。ただし、これをLinkedHashMapに置き換えると、上記のコードを使用して最初に挿入されたペアと最後に挿入されたペアを取得できます。