2020-08-28 HashMapの遍歴
HashMap:
hashCodeメソッドに従って生成されたhash値はデータを格納し、多くの場合、その値に直接位置決めできるため、アクセス速度は速いが、遍歴順序は不確定である.HashMapでは、最大1つのレコードのみを許可するキーがnullであり、複数のレコードの値がnullであることを許可します.HashMapは非スレッドで安全です.つまり、任意の時点で複数のスレッドが同時にHashMapを書くことができ、データの不一致を招く可能性があります.スレッドセキュリティを満たす必要がある場合は、CollectionsのsynchronizedMapメソッドを使用してHashMapにスレッドセキュリティ機能を持たせるか、ConcurrentHashMapを使用します.
1.HashMap遍歴方法:
1.HashMapの特徴:
3.どうやって?
次のコードとコメントを参照してください.
2つの方法の異同.異なる点は、第1の方法は、キーの値をsetセットに格納するだけであり、第2の方法は、キー値ペアをセットに格納することである. メソッド2: キー値ペアを1つのノード(Entry)にし、ノード(Entey)をCollectionが属する集合に保存することで、hasNext()メソッドとnext()メソッドをIterator(反復器)で使用してキーで値を取得できます.
一言で言えば、反復器を使用する条件はなく、条件を作成するにも反復器を使用します.
hashCodeメソッドに従って生成されたhash値はデータを格納し、多くの場合、その値に直接位置決めできるため、アクセス速度は速いが、遍歴順序は不確定である.HashMapでは、最大1つのレコードのみを許可するキーがnullであり、複数のレコードの値がnullであることを許可します.HashMapは非スレッドで安全です.つまり、任意の時点で複数のスレッドが同時にHashMapを書くことができ、データの不一致を招く可能性があります.スレッドセキュリティを満たす必要がある場合は、CollectionsのsynchronizedMapメソッドを使用してHashMapにスレッドセキュリティ機能を持たせるか、ConcurrentHashMapを使用します.
1.HashMap遍歴方法:
①keySet
②entrySet
③ keySet
④ entrySet
1.HashMapの特徴:
①JDK1.2 , , 。
② null key value。
③ : 。
④HashMap Map ,Map ( ) 。⑤Map 。
⑥Map ,HashMap TreeMap。
⑦TreeMap , HashMap 。
3.どうやって?
次のコードとコメントを参照してください.
package hashMap;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Demo01 {
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
//
map.put(1, " ");
map.put(2, " ");
map.put(3, " ");
map.put(4, " ");
map.put(5, " ");
map.put(6, " ");
System.out.println(map);
//
map.remove(2);
System.out.println(" "+map);
// ,
map.remove(6);
map.put(6, " ");
System.out.println(" "+map);
//
System.out.println(" :"+map.get(3));
System.out.println("keySet ");
for (Integer key:map.keySet()
) {
System.out.println(key+" "+map.get(key));
}
System.out.println("entrySet ");
for (Map.Entry<Integer,String> entry:map.entrySet()
) {
System.out.println(entry.getKey()+" "+entry.getValue());
}
/**
* 1. fori , , i
*
* 2. (Iterator) , Collection
*
* 3. ,
*
* :
* :
* ① keySet() map key set ,keySet() 【set( set )】
* ② ,
* ③ iter.hasNext() , iter.next() ;
* ④ value;
*
* :
* ① (key--value)
* ② > set
* ③
* ④ , hasNext() next() (key--value)
* ⑤ (key--value) key value
*/
Set<Integer> set=map.keySet();
Iterator<Integer> iter=set.iterator();
while(iter.hasNext()){
// hasNext : next , true
Integer key= iter.next();
System.out.println("key:"+key+",value:"+map.get(key));
}
/**
* while Iterator iter.next() ,
* ① ,
* ② (NoSuchElementException),
* :
* ① iter.next() , ,
* while iter.next() , ,
* ② iter.hasNext() ,
*/
System.out.println();
Set<Map.Entry<Integer,String>> set1=map.entrySet();
Iterator<Map.Entry<Integer,String>> it= set1.iterator();
while(it.hasNext()){
Map.Entry<Integer,String> entey=it.next();
System.out.println("key:"+entey.getKey()+"value:"+entey.getValue());
}
}
}
2つの方法の異同.異なる点は、第1の方法は、キーの値をsetセットに格納するだけであり、第2の方法は、キー値ペアをセットに格納することである. メソッド2: キー値ペアを1つのノード(Entry)にし、ノード(Entey)をCollectionが属する集合に保存することで、hasNext()メソッドとnext()メソッドをIterator(反復器)で使用してキーで値を取得できます.
一言で言えば、反復器を使用する条件はなく、条件を作成するにも反復器を使用します.