2010-10-31 16 views
20

Set, List ve Map'un arabirimler olduğunu biliyorum, ancak kodun ilk satırını ikinci satırdan daha iyi yapan nedir? Forma ilk kullanırsanızListe referans türü olarak ArrayList?

List myArr = new ArrayList(); 
ArrayList myArr = new ArrayList(); 
+0

ArrayList türü, List'e ek olarak daha fazla işlevsellik sağladığı için ikinci satır daha iyidir. Ancak Liste uygulamasına bağlı olmayan bir kod yaptığınızda Liste türü daha iyidir. Lütfen daha derinlemesine bilmek için [ArrayList'in Dahili Hayatı] (http://volodial.blogspot.com/2013/07/internal-life-of-arraylist-in-java.html) 'i okuyun. –

cevap

32

, sen List arayüzünün işlevselliği Hiç kullanacağız tüm edilmektedir diyorsun - başka bir şey, onun herhangi bir uygulamaya tarafından eklenen ekstra özellikle hiçbir şey. Bu, kullanılan uygulamayı kolayca değiştirebileceğiniz anlamına gelir (örneğin, ArrayList için LinkedList'un yerine sadece ArrayList yerine) ve kodun geri kalanını bozmak için endişelenmeyin, çünkü ArrayList'a özgü bir şey kullanmış olabilirsiniz. Eğer ArrayListhere kaynağından görebileceğiniz gibi kullanacağım sadece temel işlevleri (yani senin ne olduğunu ise

+2

Sanırım ArrayList'inizi debugging için bir Collections.checkedList() dosyasına koyduğunuzdan söz ederken daha zorlayıcı olabilir. LinkedList'ten bahsettiğinizde, insanlar "neden BağlantılıListimi kullanaydım?" – ILMTitan

+1

@ILMTitan: Anlaşıldı.Bu, 'LinkedList' seçeneğine geçmek zorunda kalmaktan çok daha yaygın bir senaryo. Ama 'LinkedList' de faydalıdır, her ne zaman başlangıçta bir sürü ekleme/çıkarma yapmam gerektiğine göre bunları kullanmaya geçmek zorunda kaldım. Buradaki ana nokta, uygulamayı ve ara yüzü ayırmaktır, böylece uygulama, kodun geri kalanında çok fazla değişiklik yapmak zorunda kalmadan değişebilir. – MAK

6

, @override olarak açıklamalı edilir uygulanan yöntemlerin çoğu hepsi, yani List arayüz üzerinden tanımlanır çünkü Çoğu zaman yapacaklar) fark herhangi bir pratik olmayacak.

Bir gün, ArrayList'un özelliklerinin artık sizin tür sorunlarınız için uygun olmadığını ve farklı bir şeye ihtiyacınız olacağını düşünürseniz, fark gelir (örneğin, bir LinkedList). Her şeyi List olarak bildirdiyseniz ancak ArrayList olarak başlattıysanız, örneklemeyi new ArrayList() olarak değiştirerek kolayca yeni uygulamaya geçiş yapacaksınız; diğer durumda tüm değişken bildirimleri de değiştirmeniz gerekecektir.

List list = new ArrayList()'u kullanma, daha sonra OOP stilidir, çünkü listenin belirli bir uygulamasına aldırmayacağınızı ve bu tür tarafından sağlanan arabirime bağlı olacağınız için türle ilgili statik bilgileri silmek istediğinizi beyan ettiğinizden uygulamasından soyutlama koleksiyonu.

aşağıdaki
10

programlamada tipleri (bazen robustness principle olarak anılacaktır) hakkında faydalı bir genel prensip olarak:

  • Eğer
  • Eğer
yayarlar Ne hakkında muhafazakar Be kabul ettiğiniz konusunda liberal olun

Liste, Listenin herhangi bir tür uygulaması olabileceği için ArrayList'ten daha serbesttir. bir ArrayList, bir LinkedList veya FrancosSpecialList. Bu nedenle, daha sonra uygulamayı değiştirmek isteyebileceğinizden, liberal olmak ve her tür listeyi kabul etmek iyi bir fikirdir.

ArrayList'i bir tür (ikinci durum) olarak kullanmanın esas nedeni, Liste arabiriminde bulunmayan ArrayList'e özgü yöntemleri kullanmanız gerektiğidir. Bu durumda, genel bir Liste çalışmayacaktır (çirkin ve kafa karıştırıcı döküm yapmak istemediğiniz sürece), bu nedenle açık bir şekilde ve bir ArrayList doğrudan kullanabilirsiniz. Bu, ArrayList'in belirli özelliklerinin ihtiyaç duyulduğu bir okuyucunun ima ettiği bir ikramiye avantajına sahiptir.

İlgili konular