SORU
29 HAZİRAN 2009, PAZARTESİ


HashMap anahtar olarak bir bayt dizisi (Java)kullanarak

Bakın konu Bu ile herhangi bir sorun görüyor musunuz? Ayrıca new String(byte[]) String karma yapabilirim ama daha basit byte[] kullanın

CEVAP
29 HAZİRAN 2009, PAZARTESİ


Tamam Sadece anahtar için referans eşitlik istiyorum o kadar uzun zaman olmuş - diziler "eşitlik" muhtemelen istemezsiniz. değeri uygulamak değil Örneğin:

byte[] array1 = new byte[1];
byte[] array2 = new byte[1];

System.out.println(array1.equals(array2));
System.out.println(array1.hashCode());
System.out.println(array2.hashCode());

parmak izi gibi bir şey:

false
1671711
11394033

(Gerçek sayılar alakasız; farklı olması önemlidir.)

Sen varsayarsakaslındaeşitlik istiyorum, uygun şekilde byte[] ve uygular eşitlik ve karma kodu nesil içeren kendi sarıcı oluşturmak öneriyorum

public final class ByteArrayWrapper
{
    private final byte[] data;

    public ByteArrayWrapper(byte[] data)
    {
        if (data == null)
        {
            throw new NullPointerException();
        }
        this.data = data;
    }

    @Override
    public boolean equals(Object other)
    {
        if (!(other instanceof ByteArrayWrapper))
        {
            return false;
        }
        return Arrays.equals(data, ((ByteArrayWrapper)other).data);
    }

    @Override
    public int hashCode()
    {
        return Arrays.hashCode(data);
    }
}

Not Eğer değişim değerleri içinde bayt dizisinden sonra kullanarak ByteArrayWrapper şeklinde bir anahtar HashMap (vb) zorundasın sorunları ararken tuşuna tekrar... sen-ebil almak bir kopyasını veri ByteArrayWrapper yapıcı istiyorsanız tabii ki, ama olacak bir atık performans olmadığını biliyorsunolmazbayt dizinin içeriğini değiştirme.

Açıklamalarda belirtildiği Gibi, bu (özellikle ByteBuffer#wrap(byte[]) yöntemi) ByteBuffer kullanabilirsin. EDİT: Bunun doğru olup olmadığını bilmek, ByteBuffers gerek yok olan tüm ekstra yetenekler verdi bilmiyorum ama bu da bir seçenek.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AFISHAL

    AFISHAL

    7 Mart 2009
  • Atlantic Records

    Atlantic Rec

    15 Aralık 2006
  • Engadget

    Engadget

    18 EYLÜL 2006