LinkedHashMap
キーがマップに入力された順序が重要であるため、使用しました。
しかし今、私は最初の場所(最初に入力されたエントリ)または最後にキーの値を取得したいと考えています。
first()
andlast()
またはそのようなメソッドが必要ですか?
最初のキー エントリを取得するためだけにイテレータが必要ですか? それが私が使用した理由LinkedHashMap
です!
ありがとう!
LinkedHashMap
キーがマップに入力された順序が重要であるため、使用しました。
しかし今、私は最初の場所(最初に入力されたエントリ)または最後にキーの値を取得したいと考えています。
first()
andlast()
またはそのようなメソッドが必要ですか?
最初のキー エントリを取得するためだけにイテレータが必要ですか? それが私が使用した理由LinkedHashMap
です!
ありがとう!
のセマンティクスは、 のセマンティクスでLinkedHashMap
はなく、依然として MapのセマンティクスですLinkedList
。はい、挿入順序を保持しますが、それはインターフェースの側面ではなく、実装の詳細です。
「最初の」エントリを取得する最も簡単な方法はまだentrySet().iterator().next()
です。「最後の」エントリを取得することは可能.next()
ですが、最後に到達するまで呼び出してエントリ セット全体を反復処理する必要があります。 while (iterator.hasNext()) { lastElement = iterator.next() }
編集: ただし、JavaSE API を超えることを希望する場合、Apache Commons Collectionsには独自のLinkedMap
実装があり、探していることを実行するfirstKey
や などのメソッドがあります。lastKey
インターフェイスはかなり豊富です。
次のようなことを試していただけますか (最後のエントリを取得するため):
linkedHashMap.entrySet().toArray()[linkedHashMap.size() -1];
LinkedHashMap の最初と最後のエントリを取得するもう 1 つのtoArray()
方法は、Set インターフェイスのメソッドを使用することです。
しかし、エントリ セット内のエントリを繰り返し処理し、最初と最後のエントリを取得する方が良い方法だと思います。
配列メソッドを使用すると、「...準拠するには未チェックの変換が必要」という形式の警告が表示されますが、これは修正できません[ただし、注釈を使用することによってのみ抑制できます@SuppressWarnings("unchecked")
]。
toArray()
メソッドの使用法を示す小さな例を次に示します。
public static void main(final String[] args) {
final Map<Integer,String> orderMap = new LinkedHashMap<Integer,String>();
orderMap.put(6, "Six");
orderMap.put(7, "Seven");
orderMap.put(3, "Three");
orderMap.put(100, "Hundered");
orderMap.put(10, "Ten");
final Set<Entry<Integer, String>> mapValues = orderMap.entrySet();
final int maplength = mapValues.size();
final Entry<Integer,String>[] test = new Entry[maplength];
mapValues.toArray(test);
System.out.print("First Key:"+test[0].getKey());
System.out.println(" First Value:"+test[0].getValue());
System.out.print("Last Key:"+test[maplength-1].getKey());
System.out.println(" Last Value:"+test[maplength-1].getValue());
}
// the output geneated is :
First Key:6 First Value:Six
Last Key:10 Last Value:Ten
おそらくこのようなもの:
LinkedHashMap<Integer, String> myMap;
public String getFirstKey() {
String out = null;
for (int key : myMap.keySet()) {
out = myMap.get(key);
break;
}
return out;
}
public String getLastKey() {
String out = null;
for (int key : myMap.keySet()) {
out = myMap.get(key);
}
return out;
}
提案:
map.remove(map.keySet().iterator().next());
メソッドを持つConcurrentSkipListMapfirstKey()
を使用することをお勧めしますlastKey()
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class Scratch {
public static void main(String[] args) {
// Plain java version
Map<String, List<Integer>> linked = new LinkedHashMap<>();
linked.put("a", Arrays.asList(1, 2, 3));
linked.put("aa", Arrays.asList(1, 2, 3, 4));
linked.put("b", Arrays.asList(1, 2, 3, 4, 5));
linked.put("bb", Arrays.asList(1, 2, 3, 4, 5, 6));
System.out.println("linked = " + linked);
String firstKey = getFirstKey(linked);
System.out.println("firstKey = " + firstKey);
List<Integer> firstEntry = linked.get(firstKey);
System.out.println("firstEntry = " + firstEntry);
String lastKey = getLastKey(linked);
System.out.println("lastKey = " + lastKey);
List<Integer> lastEntry = linked.get(lastKey);
System.out.println("lastEntry = " + lastEntry);
}
private static String getLastKey(Map<String, List<Integer>> linked) {
int index = 0;
for (String key : linked.keySet()) {
index++;
if (index == linked.size()) {
return key;
}
}
return null;
}
private static String getFirstKey(Map<String, List<Integer>> linked) {
for (String key : linked.keySet()) {
return key;
}
return null;
}
}
linkedHashMap は、最初、最後、または特定のオブジェクトを取得する方法を提供していません。
しかし、取得するのはかなり簡単です:
Map<Integer,String> orderMap = new LinkedHashMap<Integer,String>();
Set<Integer> al = orderMap.keySet();
al
オブジェクトでイテレータを使用するようになりました。任意のオブジェクトを取得できます。
はい、同じ問題に遭遇しましたが、幸いなことに最初の要素だけが必要です... -これが私がしたことです。
private String getDefaultPlayerType()
{
String defaultPlayerType = "";
for(LinkedHashMap.Entry<String,Integer> entry : getLeagueByName(currentLeague).getStatisticsOrder().entrySet())
{
defaultPlayerType = entry.getKey();
break;
}
return defaultPlayerType;
}
最後の要素も必要な場合-マップの順序を逆にする方法を調べます-一時変数に保存し、逆マップの最初の要素にアクセスします(したがって、最後の要素になります)、一時変数。
ハッシュマップの順序を逆にする方法に関するいくつかの良い答えを次に示します。
上記のリンクからヘルプを使用する場合は、賛成票を投じてください:)これが誰かの助けになることを願っています.