私はLinkedHashMapに要素を追加しようとしています。 LHMの各エントリは、キーとページと呼ばれるクラスです。Longをパラメータとして送信するには、Longのインスタンスを作成する必要がありますか?
私はこのコードを書いた:
public void addPage(Page<byte[]> addPage)
{
if(numOfPages < initialCapacity) // Checks that there is room
{
pages.put(new java.lang.Long(addPage.hashCode()), addPage);
numOfPages++;
}
}
動作するようにし、エラーを与えるものではありませんようです。
しかし、私はなぜ理解していない:
public void addPage(Page<byte[]> addPage)
{
if(numOfPages < initialCapacity) // Checks that there is room
{
pages.put(java.lang.Long(addPage.hashCode()), addPage);
numOfPages++;
}
}
は動作しません。 hashCodeからLongに返されたintをキャストする代わりに、実際にLong
の新しいインスタンスを作成する必要がありますか?非常に無駄に思える。
編集 - クラスのページ:
public class Page<T>
{
private T content;
private java.lang.Long pageId;
public Page(java.lang.Long pageId, T content)
{
this.pageId = pageId;
this.content = content;
}
public java.lang.Long getPageId()
{
return pageId;
}
public void setPageId(java.lang.Long pageId)
{
this.pageId = pageId;
}
public T getContent()
{
return content;
}
public void setContent(T content)
{
this.content = content;
}
public boolean equals(Page<T> page)
{
if(this.pageId == page.getPageId())
return true;
return false;
}
}
'pages.put(java.lang.Long(addPage.hashCode())、addPage);'は構文的に間違っています。ここに投稿を作成したとき、または実際にこの行で試してみたときに、これは単なるコピー&ペーストエラーですか? – dunni
hashCode()は通常、int型の値であり、ユニークであることが保証されていないため、重複が発生します。マップエントリのコード、または使用している値のサイズを比較するのは無駄ではありません。違いはほとんどありません。より多くの問題は、あなたのhashCode()が約60Kのエントリで繰り返す可能性が高いことです。これは、無駄なメモリを心配するよりもずっと前です。 –
私は参照してください。それは確かに大きな問題です。それから、より良い方法でハッシュするのですか? –