私は、ハッシュマップに新しいランダムキーを入れたいときに何回比較を行うかを数えるメソッドを作りたいと思っています。私はマップに新しいキーを置くために使用されるコードは以下の通りです:ハッシュマップに新しいキーを入力しようとすると、何の比較が行われますか?
public void put(int key, int value) {
int hash = (key % table.length);
int initialHash = -1;
int indexOfDeletedEntry = -1;
while (hash != initialHash
&& (table[hash] == DeletedEntry.getUniqueDeletedEntry()
|| table[hash] != null
&& table[hash].getKey() != key)) {
if (initialHash == -1)
initialHash = hash;
if (table[hash] == DeletedEntry.getUniqueDeletedEntry())
indexOfDeletedEntry = hash;
hash = (hash + 1) % table.length;
}
if ((table[hash] == null || hash == initialHash)
&& indexOfDeletedEntry != -1) {
table[indexOfDeletedEntry] = new HashEntry(key, value);
size++;
} else if (initialHash != hash)
if (table[hash] != DeletedEntry.getUniqueDeletedEntry()
&& table[hash] != null && table[hash].getKey() == key)
table[hash].setValue(value);
else {
table[hash] = new HashEntry(key, value);
size++;
}
if (size >= maxSize)
resize();
}
削除されたエントリのクラスは以下の通りです:
public class DeletedEntry extends HashEntry {
private static DeletedEntry entry = null;
private DeletedEntry() {
super(-1, -1);
}
public static DeletedEntry getUniqueDeletedEntry() {
if (entry == null)
entry = new DeletedEntry();
return entry;
}
}
また、HashEntryクラスは、2つのint型の変数、int型のキーを持っていますint値です。 どのように私は比較を数えることができますか? これは私が私のメインでやったものです:
Random rand = new Random();
int[] comparisons = new int[20];
int key = 0;
for (int k=0;k<20;k++){
key = rand.nextInt(1000) + 1;
}
何の比較? HashMapクラスのバイトコードを計測するためのJavaエージェントの作成を見てください。 – Roman
新しいキーを入れようとすると、@Romanの比較が行われる –
@AsukaMatseliあなた自身で 'HashMap'を手動で実装していますか?' Java'はすでに実装されていますか? –