0

Javaで値を重複させずに一意のデータを保存する方法を知りたいですか?データを保存するときに設定が従うメカニズムはありますか?

4

1 に答える 1

5

java.util.Set#add(E)追加しようとする要素をキーとして渡すことを内部的に呼び出します。ここで、現在のセットにキーのjav.util.Map#put(K,V)ハッシュコードと同じハッシュコードを持つ要素があるかどうかを確認し (キーは挿入しようとする要素です)、等しいかどうかも確認します。 equals() メソッドを使用します。ハッシュコードまたは等しいテストが失敗した場合にのみセットに追加されます。ハッシュコードと等しいテストの両方がパスした場合は、単に古い値を現在の値に置き換えます。以下は、Set#add() と Map#put() の両方のソースです。

Set#add(E)

public boolean add(E e) {
217        return map.put(e, PRESENT)==null;
218    }

Map#put(K,V)

 public V put(K key, V value) {
387         if (key == null)
388             return putForNullKey(value);
389         int hash = hash(key.hashCode());
390         int i = indexFor(hash, table.length);
391         for (Entry<K,V> e = table[i]; e != null; e = e.next) {
392             Object k;
393             if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
394                 V oldValue = e.value;
395                 e.value = value;
396                 e.recordAccess(this);
397                 return oldValue;
398             }
399         }
400 
401         modCount++;
402         addEntry(hash, key, value, i);
403         return null;
404     } 
于 2013-03-15T16:29:30.493 に答える