HashMapとは異なり、LinkedHashMapでは順序が重要です。そして、ここでの順序は挿入順序です。
次のようなLinkedHashMapがあるとします(上から下に並べられ、左側がキー、右側が値です)。
1:「1つ」
2:「2つ」
3:「3」
4:「4」
次に、キーのリストがあります。これには、たとえば(3,1)が含まれています。
私がやりたいのは、LinkedHashMapを順番にループして、キーがリストにあるエントリを選択することです。
したがって、私が望む結果は次のとおりです(フィルタリング前の順序であるため、1はまだ3より前です):
1:「1つ」
3:「3」
これが私のコードです:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class SelectCertainEntriesFromLinkedHashMap {
public static void main(String args[]) {
Map<Integer,String> linkedHashMap = new LinkedHashMap<Integer,String>();
linkedHashMap.put(1, "One");
linkedHashMap.put(2, "Twe");
linkedHashMap.put(3, "Three");
linkedHashMap.put(4, "Four");
List<Integer> list = new ArrayList<Integer>();
list.add(3);
list.add(1);
Map<Integer,String> selectedlinkedHashMap = new LinkedHashMap<Integer,String>();
//will this iterator iterate the keys in the order of the map (1, 2, 3, 4)? Or just random order?
Iterator<Integer> itr = linkedHashMap.keySet().iterator();
while(itr.hasNext()) {
Integer key = itr.next();
if (list.contains(key)) {
selectedlinkedHashMap.put(key, linkedHashMap.get(key));
System.out.println(key + ":" + linkedHashMap.get(key));
}
}
}
}
上記のコードは私が好きな結果を返します。しかし、それが保証されているかどうかはわかりません。
1:「1つ」
3:「3」
問題は次のとおりです。イテレータitr=linkedHashMap.keySet()。iterator(); 上記の行はセットからイテレータを取得し、セットは注文されていません。それで、これはランダムな順序でキーを引き起こしますか?はいの場合、フィルタリング後にマップの元の順序(保証されていません)を維持できません。...誰かがこれを手伝ってくれますか?