SORU
23 Kasım 2011, ÇARŞAMBA


Dava HashMap anahtar olarak duyarsız dize

Aşağıdaki nedenlerle HashMap bir anahtar olarak büyük / küçük harf duyarlı dize kullanmak istiyorum.

  • Başlatma sırasında program kullanıcı tanımlı Dize ile HashMap oluşturur
  • Bir olay (benim durumumda Ağ Trafiği) işlenirken farklı bir durumda Dize almış olabilirim ama HashMap trafik alınan davayı görmezden gelen bulmak gerekir.

Bu yaklaşım izledim

CaseInsensitiveString.java

    public final class CaseInsensitiveString {
            private String s;

            public CaseInsensitiveString(String s) {
                            if (s == null)
                            throw new NullPointerException();
                            this.s = s;
            }

            public boolean equals(Object o) {
                            return o instanceof CaseInsensitiveString &&
                            ((CaseInsensitiveString)o).s.equalsIgnoreCase(s);
            }

            private volatile int hashCode = 0;

            public int hashCode() {
                            if (hashCode == 0)
                            hashCode = s.toUpperCase().hashCode();

                            return hashCode;
            }

            public String toString() {
                            return s;
            }
    }

LookupCode.java

    node = nodeMap.get(new CaseInsensitiveString(stringFromEvent.toString()));

Bu nedenle, her olay için CaseİnsensitiveString yeni bir nesne yaratıyorum. Bu yüzden, performans isabet olabilir.

Bu sorunu çözmek için başka bir yol var mı?

CEVAP
11 Mart 2014, Salı


Map<String, String> nodeMap = 
    new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);

Buna gerçekten ihtiyacınız var.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Brandon McCrary

    Brandon McCr

    15 Ocak 2012
  • pain975

    pain975

    27 NİSAN 2008
  • SomeOne Pro

    SomeOne Pro

    25 EKİM 2013