2010-07-12 29 views
5

Bir Tree kullanarak temsil etmem gereken bir Bölge Hiyerarşisi (Düşünce Devleti, Bölge, Taluk, vb.) Var. Kamu alanında bir ağacın birkaç uygulamasını gördüm ama ne kadar iyi olduklarından ve ne kadar iyi korunduklarından emin değilim. Apache Koleksiyonları, google koleksiyonlarından biri olan NOR'lerden birine sahip değil. Herhangi birinizin beni Java'daki bir Ağacın uygulamasına yönlendirebileceğini merak ediyorum (jeneriklerle). iyi test: Bir Ağaç veri tipleri de arıyorum Ağaç için hangi java veri yapı/kütüphanesi kullanıyorsunuz

tercihen Genellemelere kullanılarak uygulanan,

Güncelleme, teşekkür ederiz.

+0

yorumunu size bildirir, hiç kimse sorunuzu yanıtlamıyor. –

cevap

1

Generikleri kullanarak bir ağacın uygulanması oldukça basit, neden kendiniz denemeyin? Jeneriklerle ilgili rahat değilseniz, bir arayüz uygulayan öğeleri içeren bir ağaç bildirmeyi deneyebilir, ardından tüm bölge öğeleriniz bu arayüzü uygular.

+2

Uzun zaman önce C/C++ 'da birkaç kez ağaç uyguladık. Yeniden kullanabileceğim bir şey olsaydı, test edilmiş ve test edilmiş bir ünite kullanmayı tercih ederim! – anjanb

+0

Temel bir ağacın uygulanması kolaydır. Ancak ciddi ağaçların yeniden dengelenmesi (örneğin Kızıl-Siyah ağaçlar) gerekir. Bunlar doğru ve verimli olmak için zaman alırlar. Örneğin, hatırladığım kadarıyla, RB-ağaçları için 7 farklı rotasyon kılıfı vardır. –

+0

Eğer bir RB ağacını yeniden dengeliyorsanız, ağacın sipariş özelliğini, yapısal nitelikleri (ebeveyn, çocuk) ile ilgilenmiyorsunuz. Bu durumda, Java kesinlikle TreeSet, tam olarak bunu yapar, kütüphaneleri kontrol edin. Ebeveyn/çocuk ilişkilerini izlemek için bir "Ağaç Yapısı" nı kullanmak istiyorsanız, uygulama önemsizdir ve itirazınız bir anlam ifade etmez. –

1

Ağaç Widget'ı veya ağaç benzeri veri yapısı kastediyor musunuz? Bir ağaç widget'ından bahsediyorsanız, Swing'in bir uygulaması vardır. Tarif ettiğiniz ne

JTree

+0

teşekkürler. Ağaç veri yapılarını kastettim. – anjanb

1

çok daha bir belge nesne modeli (DOM) gibidir. Genellikle insanlar bir "Ağaç" veri yapısına başvurduklarında, dengeli bir ikili ağaçtan (Java koleksiyonları kütüphanesinde var olan kırmızı-siyah bir ağaç gibi) bahsediyorlar. Ancak bu tür ağaçlar sadece hızlı bir şekilde siparişe eklemeleri ve aramaları içindir. Her neyse, çoğu zaman, insanlar DOM kullandığında, XML okuyor ya da yazıyorlar, ancak kendi keyfi hiyerarşik verileriniz için DOM kullanamazsınız. XML'e asla devam etmese bile.

+0

DOM. XML için kullanmıyorken DOM ne kadar pahalı? – anjanb

+0

Gerçekten bilmiyorum ama birkaç şey hakkında spekülasyon yapabilirim ...DOM'ın pahalı bir XML ayrıştırma tekniği olarak görülmesinin nedeni, XML ile tarama yapmak ve SAX olaylarını yakmak yerine tüm XML dosyasını ayrıştırmak ve bellekte tutmak zorunda olmanızdır. Ama sizin durumunuzda, tüm belgeyi bir şekilde belleğe almanız gerekiyor, bu yüzden bir DOM uygulamasının kendiniz yuvarlayabileceğiniz herhangi bir özel veri yapısından çok daha pahalı olacağını düşünmüyorum. (Ve tabii ki, G/Ç maliyetini ödemezsiniz.) Sonra tekrar, kendi ağaç modelinizde XML'in belirli semantikleriyle yaşamak zorunda kalacaksınız. – benjismith

1

Böyle bir şey ister misiniz http://www.java-tips.org/java-se-tips/java.lang/red-black-tree-implementation-in-java.html?

Ayrıca, java.util.TreeMap kaynağı ile OpenJDK'den başlamaya ne dersiniz? http://download.java.net/openjdk/jdk7/

+0

Bu uygulamalar ikili ağaçlar içindir. Her eyalette sadece iki bölge var ve her bölge sadece iki tane mi? Eğer öyleyse, o zaman işe yarayabilir. Hiyerarşide her seviyeden ikiden fazla örneğe gereksinim duyarsanız (ve sanırım yaptığınızı tahmin ediyorum), o zaman kendi başınızı döndürmek isteyeceksiniz. Bunu, birkaç hafta önce yaptığım bazı XML ayrıştırmaları için yaptım ve bunu, tasarlanması, test edilmesi, yazılması ve belgelenmesi için sadece birkaç saatimi aldım. Kodu paylaşamıyorum (yine de C#), ancak kendi başınıza bir şeyler yapmak istemiyorsanız tasarımı paylaşabilirim. – TMN

+0

Bu, bir RB ağacının Java uygulamasını aradığınızda ilk önce google'da açılan RB ağacı örneğidir. Ancak birim testleri vb. Yoktur ve eksiktir: kaldırma işlemi uygulanmamıştır ve nedenini (RB ağaçları için karmaşıklığı göz önüne alındığında) görebiliyorum. –

2

DefaultMutableTreeNode'a bakın. Bu genel değil, ancak faturaya uyuyor gibi görünüyor. Javax.swing paketinde olmasına rağmen, herhangi bir AWT veya Swing sınıfına bağlı değildir. Aslında, kaynak kod aslında // ISSUE: this class depends on nothing in AWT -- move to java.util?

İlgili konular