SORU
2 EYLÜL 2011, Cuma


Kümesinden bir eleman almak

Neden başka bir unsur eşit bir eleman almak için bir operasyon povide Set değil mi?

Set<Foo> set = ...;
...
Foo foo = new Foo(1, 2, 3);
Foo bar = set.get(foo);   // get the Foo element from the Set that equals foo

Set bir öğe bar eşit olup olmadığını, ben neden eleman almıyor? sorabilirim :(

Açıklığa kavuşturmak için, equals yöntemi geçersiz olduğunu, ancak bu alanları kontrol eder, hepsi değil. Eşit olarak kabul edilen iki Foo nesneleri gerçekten farklı değerlere sahip olabilir, bu sadece foo kullanamam.

CEVAP
22 AĞUSTOS 2013, PERŞEMBE


Hassas soruya cevap vermek için "NedenSet başka bir unsur eşit bir eleman almak için bir operasyon povide değil mi?", cevap: çerçeve çok ileriye dönük değil. koleksiyonun tasarımcıları çünkü Çok meşru kullanma durumu tahmin etmediler, safça için çalıştı "" (javadoc) ve sadece eklemeyi unuttum faydalı get() yöntemi. model set matematiksel soyutlama

İma sorusuna artık "nasıleleman, anlamıyor musun": en iyi çözümü kendileri için öğeleri göster için bir dizi yerine bir Harita kullanmak olduğunu düşünüyorum. Bu şekilde yapabilirsinizverimli bir şekildebir eleman "çünkü", () haritası yöntemi elemanı verimli karma bir tablo veya ağaç algoritması kullanarak bulabilirsiniz. setini almak Eğer istersen, ek almak sunan set kendi uygulaması yazabilirsin() yöntemi, harita ve davetkar.

Aşağıdaki cevaplar ımho kötü ya da yanlış

"Zaten eşit bir nesne var çünkü eleman almaya gerek yok": iddia zaten soruyu gösterdiği gibi yanlış. Eşit olan iki nesne hala nesne eşitlik alakalı değil, farklı bir hal alabilir. Amaç öğesi kümesi içinde yer alan, nesnenin bir devlet olarak bu duruma erişim elde etmektir"". sorgu

"Başka bir seçenek ama kullanmak için yineleyici": diğer bir deyişle, bir doğrusal arama üzerinde bir koleksiyonu olan tamamen verimsiz için büyük kümeleri (ironik olarak, dahili olarak ayarlanır organize olarak karma harita veya ağaç olabilir sorgulanan verimli). Yapma! Bu yaklaşımı kullanarak gerçek hayat sistemlerde ciddi performans sorunları gördüm. Imho ne korkunç hakkında eksik olsun() yöntemi çok değil bu biraz hantal bir çözüm, ama çoğu programcılar kullanır doğrusal arama yaklaşımı düşünmeden etkileri.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Washington

    Adam Washing

    12 Mayıs 2006
  • trickycharms

    trickycharms

    6 Aralık 2013
  • UniqueApps

    UniqueApps

    4 Ocak 2009