2010-09-07 30 views
9

Değişken boyutta bir dizi dizi döndürmesi gereken bir sınıfım varsa (ve bu boyut yalnızca sınıfın bazı yöntemlerini çalıştırdıktan sonra belirlenebilir), sınıfımın yapıcısındaki dinamik diziyi nasıl bildirebilirim? biz sadece $my_string_array = array(); olarak dizelerden oluşan bir diziyi bildirmek ve java sonra yukarıda kod eşdeğer nedir $my_string_array[] = "New value";Java'da dinamik bir diziyi nasıl başlatılır?

tarafından kendisine elemanları ekleyebilirsiniz php

soru yeterince açık değilse, ?

cevap

13

Sen java.util package, özellikle ArrayList sınıfa bakmak isteyecektir. .add() .remove() .indexof() .contains() .toArray() ve daha fazlası gibi yöntemleri vardır.

+1

Sadece tam olarak, java.util'de (diğer tüm koleksiyon sınıflarıyla birlikte). java.util.Collections' (büyük harf C ile) bir yardımcı program sınıfı değil, bir pakettir. –

+0

@Peter iyi yakaladım, benim sonrası –

+0

mesajımı düzelttim, takip eden bir soru dizgesi oluşturmak da mümkündür [ör .: $ my_string_array ["property"]]? – lock

6

Bunun yerine bir List oluşturun.

List<String> l = new LinkedList<String>(); 
l.add("foo"); 
l.add("bar"); 
+3

Çoğu kullanım durumu için bir dizi listesi daha iyi bir seçimdir, ancak bu nedenle, değişkenler sınıflara karşı olan arabirimleri kullanarak bildirmenin neden her zaman iyi olduğu (bu nedenle, temel uygulamayı değiştirmek kolay olur). –

1

Java'da dinamik bir dizi yok, dizi uzunluğu sabit. Benzer yapı ArrayList olup, bunun altında gerçek bir dizi oluşturulur. adını Dizisi Liste :) Bkz

7

Düz java diziler (yani String[] strings) dinamik olarak yeniden boyutlandırılabilir edilemez; oda dışında olduğunuzda ancak hala dizinizdeki öğeleri eklemek istiyorsanız, daha büyük bir tane oluşturmanız ve mevcut diziyi ilk n konumlarına kopyalamanız gerekir.

Neyse ki, sizin için bu işi yapan java.util.List uygulamaları vardır. java.util.ArrayList ve java.util.Vector, diziler kullanılarak uygulanır.

Ancak, dizelerin dahili olarak bir dizide depolanmasının gerçekten umrunda mı yoksa sadece odadan kaçmak için endişelenmeden öğeleri eklemeye devam edecek bir koleksiyona ihtiyacınız var mı? İkincisi ise, o zaman orada bir kaç genel amaçlı List uygulamalarından birini seçebilirsiniz. Çoğu zaman seçimlerdir:

  • ArrayList -
  • Vector
  • senkronize değil temel dizi temelli uygulama, - senkronize, dizi bazlı uygulama
  • LinkedList - Çifte bağlantılı liste uygulaması, hızlı ortada öğeleri eklemek için listenin listesi

Listenizin yinelenen öğeleri olmasını bekliyor musunuz? Kullanım durumunuz için yinelenen öğeler hiçbir zaman mevcut değilse, bir java.util.Set tercih etmelisiniz. Setlerin çift kopya içermemesi garanti edilir. İyi bir genel amaçlı set uygulaması java.util.HashSet.

Cevap takip etmek

$my_string_array["property"] benzer bir dizini kullanarak erişim dizeleri için soru, ayrıca java.util pakette, bir Map<String, String> içine koymak gerekir. İyi bir genel amaçlı harita uygulaması HashMap'dur.Eğer harita oluşturduktan sonra

,

  • Kullanım map.put("key", "string")

    onun anahtar ile bir dize erişmek için dizeleri
  • Kullanım map.get("key") ekleyin.

java.util.Map'un yinelenen anahtarlar içeremeyeceğini unutmayın. Aynı tuşla art arda put'u ararsanız, sadece en son aramada ayarlanan değer kalır, daha önce olanlar kaybolacaktır. Ama bu aynı zamanda PHP ilişkilendirici dizileri için bir davranış olduğunu tahmin ediyorum, bu yüzden sürpriz olmamalı.