2015-07-13 20 views
5

HashSet<String> veri yapısının benzersiz dizeleri saklayabildiğini ve karma dizgisi kullandığı için dizenin O (1) karmaşıklığında mevcut olup olmadığını söyleyebileceğini biliyorum. Mektup davayı görmezden gelmek istersem, aynı karmaşıklık sağlanabilir mi? Sonraki kullanım durumu aşağıdaki gibi çalışmalıdır:Dizeleri depolayan ve harf durumunu göz ardı eden veri yapısı

Böyle bir veri yapısını uygulamak mümkün mü?

+0

@dave son satırı için değer olarak özgün dize ve küçük harf tek bir HashMap kullanmak - New York hazır haldedir, ben dize normalleştirmek olamaz yazdırır Ekleme –

+0

'da küçük harflere küçültme Eğer '.equals() 've' .hashCode()' yöntemlerini geçersiz kılan yeni bir sınıf oluşturdunuz? –

+1

@jameslarge Dize sınıfı son, uzatılamıyor. – dave

cevap

3

Sadece kod anahtarı

Map<String, String> map = new HashMap<>(); 
map.add("New York".toLowerCase() ,"New York"); 
map.containsKey("new york".toLowerCase()) == true; 
map.containsKey("NEW YORK".toLowerCase()) == true; 

map.values().each(it -> print it) ---> prints "New York" 
+0

Yani O (1) tahmin etmek için bir HashMap sarmak zorunda –

6

Belki TreeSet ne arıyorsun?

TreeSet<String> ts=new TreeSet<String>(String.CASE_INSENSITIVE_ORDER); 
+1

'SortedSet ts = yeni TreeSet <> (String.CASE_INSENSITIVE_ORDER);' CASE_INSENSITIVE_ORDER' bir Karşılaştırıcıdır. –

+0

güzel, ama O (1) 'de yapılabilir mi? –

0

Ben Java yabancıyım, ama burada bunu nasıl iki fikir:

  1. harfe duyarlı HashSet kullanmak için yeni bir karşılaştırıcısı tanımlayın.
  2. HashSet, hepsi aynı anahtara sahip olan string s listesini bulundurur. Yani, New York ve NEW YORK her ikisi de new york anahtarının altındaki listede olacaktır.
İlgili konular