2014-06-27 23 views
6

Bugün bir röportaj yaptım ve görüşmeci bana HashMap'te aynı anahtara sahip birden çok değeri nasıl saklayabileceğimi sordu? Bana bu örneği verdi -> Eğer bir String listesi verilmişse ve String'in uzunluğunu anahtar olarak ve String'in kendisini değer olarak saklıyorum.Birden çok değeri Hash ile aynı anahtarla kaydetme

Map<Integer, ArrayList<String>> map = new HashMap<Integer, ArrayList<String>>(); 

Tamsayı dize uzunluğu olmak ve ArrayList o belirli uzunlukta Dizeleri saklar:

Ona ben HashMap kullanarak nasıl aşağıdaki çözümü verdi.

Görüşmeci bunun HashMap'i kullanmanın bir yolu olduğunu ancak ArrayList veya başka bir veri yapısı gerektirmeyecek başka bir yol olduğunu söyledi. Görüşme sırasında herhangi bir çözüm bulamadım ve şu anda yeterli olandan sonra hala hiçbir şeyim yok. Bana bu sorunun çözümüne nasıl ulaşabileceğimi söyleyen var mı?

Teşekkürler!

+0

'HashMap', tanım gereği anahtar başına bir değere sahiptir ... Görüşmecinin neyle karşılaştığını tam olarak bilmiyordum. – awksp

+0

@ user3580294: ona böyle söyledim .. ama bana bunun için çok temel bir kavramsal cevap bulunduğunu söyledi .. –

+0

ne kullanabiliyorsunuz? Kavramın hashmap veri yapısından mı bahsediyor? – CMPS

cevap

8

Tek yolu bulunabilir değerlerde bütün dizeleri bitiştirmek edilir.

Örneğin;

map.put(2,"rr*tt*yy"); 
map.put(3,"nnn*ggg*sss"); 
map.put(4,"ffff*dddd*jjjj"); 
+5

Bu ilginç bir düşünce. Kesinlikle gerçek dünyada işe yaramaz, ama kesinlikle bir olasılık ... – awksp

+0

İyi Peki ... Sanırım onun sorusu için olası bir cevap var ... Cevap arkadaşı için teşekkürler :) –

+2

+ 1 İlginç. Görüşme yapan kişi bu olabilir. Yine de, henüz belgelenmemiş ve dilin kendi imkanlarını kullanmayan bir veri yapısı olarak sayılsa da: aslında bir sınırlayıcı veya bilinen bir eleman uzunluğunu kullanarak ArrayList tarzı bir liste uygulamak.(Anahtarlar anahtardan bilindiği için alt dizeler arasında "*" gerekmez. Ayrıca bir sınırlayıcı kullanılıyorsa çıkış yöntemini kullanmanız gerekir.) –

0

Görüşmeci, 3. taraf API'lerini biliyorsanız ya da bilmediğinizi kontrol etmek istiyor olabilir. Bunu yapmak için birden fazla API var. Bazıları herhangi bir veri yapısı kullanmadan http://java.dzone.com/articles/hashmap-%E2%80%93-single-key-and

+0

Görüşmeci, başka bir veri yapısına ihtiyaç duymadığını söyleyerek, 3. parti apis demek istemiyor – maress

0

Bir seçenek, harita bir kayıt eklemek dize uzunluğunu almak, tuz daha sonra dize boyutu anahtar olarak kullanmak şifrelemek istediğiniz her zamanıdır. BAM: String dizilemeyle çok fazla uğraşmadan her String için bir (oldukça) benzersiz yeniden alınabilir anahtarınız var.

Sadece tersine çevrilebilir bir şifreleme algoritması kullandığınızdan emin olun.

Başka bir seçenek, bir UUID oluşturmak ve bu dizginin boyutuna bitiştirmektir.

UUID uuid = UUID.randomUUID() 
String key = stringSize + "," + uuid; 

Bu aynı zamanda String.split() kullanarak sonradan ulaşabildiği benzersiz bir değer ile sonuçlanacaktır;

İlgili konular