PHP'de, aşağıdakileri yaparak dizilere dinamik olarak eleman ekleyebilirsiniz:
$x = new Array();
$x[] = 1;
$x[] = 2;
Bundan sonra, $x
böyle bir dizi olacaktır: {1,2}
.
Java'da benzer bir şey yapmanın bir yolu var mı?
PHP'de, aşağıdakileri yaparak dizilere dinamik olarak eleman ekleyebilirsiniz:
$x = new Array();
$x[] = 1;
$x[] = 2;
Bundan sonra, $x
böyle bir dizi olacaktır: {1,2}
.
Java'da benzer bir şey yapmanın bir yolu var mı?
Yanıtlar:
Java.util.LinkedList veya java.util.ArrayList'e bakın
List<Integer> x = new ArrayList<Integer>();
x.add(1);
x.add(2);
int[]
) ihtiyaç duyduğunuz örnekler için yalnızcatoArray()
yöntemi . Yukarıdaki kodu kullanın, ancak x.toArray()
ilkel bir Dizi elde etmek için kullanın .
ARRAY
nesneleri gibi bir şeyle veya bunun gibi saçmalıklarla arayüz oluşturmadığınız sürece , ilkel dizilerden kaçınmanız çok daha iyidir.
List
referans kullanmak ArrayList
, istediğimiz zaman kaldırıma tekmelememizi sağlar . Birisi daha iyi bir liste yayınlarsa, mesela SuperDuperAwesomeList
, referansımızı atarsak yapacak çok işimiz olabilir ArrayList
. ArrayList'te List'in sahip olmadığı şeyler vardır. Kodumuzdaki bu şeylere güvenirsek, takas etmek çok daha zor hale gelir.
Java'daki dizilerin boyutu sabittir, bu nedenle PHP'de olduğu gibi "sonuna bir şey ekleyemezsiniz".
PHP davranışına biraz benzer:
int[] addElement(int[] org, int added) {
int[] result = Arrays.copyOf(org, org.length +1);
result[org.length] = added;
return result;
}
O zaman yazabilirsiniz:
x = new int[0];
x = addElement(x, 1);
x = addElement(x, 2);
System.out.println(Arrays.toString(x));
Ancak bu şema, her seferinde tüm dizinin bir kopyasını oluşturduğundan, daha büyük diziler için korkunç derecede verimsizdir . (Eski dizileriniz aynı kaldığı için aslında PHP ile tamamen eşdeğer değildir).
PHP dizileri aslında "max key" eklenmiş bir Java HashMap ile tamamen aynıdır, bu yüzden bir sonra hangi anahtarın kullanılacağını ve garip bir yineleme sırası (ve Tamsayı anahtarları ile bazı Strings arasında garip bir denklik ilişkisi) bilecektir. Ancak, basit indekslenmiş koleksiyonlar için, önerilen diğer cevaplayıcılar gibi Java'da bir Liste kullanın.
Kullanmaktan kaçınmak istiyorsanız List
Tamsayıdaki her int'i sarmalama ek yükü nedeniyle , dahili olarak dizileri kullanan ancak her değişiklikte bir kopya oluşturmayan ilkel türler için koleksiyonların yeniden uygulamalarını kullanmayı düşünün, yalnızca dahili dizi dolu olduğunda ( tıpkı ArrayList gibi). (Hızlı bir şekilde Google'da araştırılan bir örnek bu IntList sınıfıdır .)
Guava içeren bu sarma oluşturma yöntemleri de Ints.asList
, Longs.asList
vs.
ArrayList
- her eklemede yeniden boyutlandırmak yerine, oda tükendiğinde boyut olarak iki katına çıkar, böylece sık sık yeniden boyutlandırmak zorunda kalmaz.
org
daha kısa result
.
Apache Commons, yeni dizinin sonuna bir öğe eklemek için bir ArrayUtils uygulamasına sahiptir :
/** Copies the given array and adds the given element at the end of the new array. */
public static <T> T[] add(T[] array, T element)
Bu soruyu web'de çok sık gördüm ve bence itibarı yüksek birçok kişi bu sorulara doğru cevap vermedi. Bu yüzden burada kendi cevabımı ifade etmek istiyorum.
İlk önce ve arasında bir fark olduğunu düşünmeliyiz .array
arraylist
Soru , ArrayList yerine bir diziye öğe eklemenizi ister.
Cevap oldukça basit. 3 adımda yapılabilir.
Ve son olarak işte kod:
Aşama 1:
public List<String> convertArrayToList(String[] array){
List<String> stringList = new ArrayList<String>(Arrays.asList(array));
return stringList;
}
Adım 2:
public List<String> addToList(String element,List<String> list){
list.add(element);
return list;
}
Aşama 3:
public String[] convertListToArray(List<String> list){
String[] ins = (String[])list.toArray(new String[list.size()]);
return ins;
}
4. adım
public String[] addNewItemToArray(String element,String [] array){
List<String> list = convertArrayToList(array);
list= addToList(element,list);
return convertListToArray(list);
}
Bir kullanabilir ArrayList
ve ardından toArray()
yöntemi kullanabilirsiniz . Ancak ne yaptığınıza bağlı olarak, bir diziye hiç ihtiyacınız olmayabilir. Lists
İstediğinizden daha fazlası olup olmadığına bakın .
Bakınız: Java Listesi Eğitimi
Dinamik olarak boyutlandırılmış dizi benzeri bir yapı için, muhtemelen bunun için bir ArrayList kullanmak isteyeceksiniz.
JAVA'da Koleksiyon Çerçevelerini kullanarak bir diziye dinamik olarak eleman ekleyebilirsiniz. collection Framework, ilkel veri türleri üzerinde çalışmaz.
Bu Koleksiyon çerçevesi "java.util. *" Paketinde bulunacaktır.
Örneğin, ArrayList kullanıyorsanız,
Bir nesne oluşturun ve ardından öğe sayısı ekleyin (String, Integer ... vb. Herhangi bir tür)
ArrayList a = new ArrayList();
a.add("suman");
a.add(new Integer(3));
a.add("gurram");
Şimdi bir diziye 3 öğe eklediniz.
eklenen öğelerden herhangi birini kaldırmak istiyorsanız
a.remove("suman");
tekrar herhangi bir öğe eklemek isterseniz
a.add("Gurram");
Yani dizi boyutu dinamik olarak artıyor / azalıyor ..
Dizi boyutunu otomatik olarak artırmak için bir ArrayList veya dizilere hokkabazlık yapın.
ilkel dizide nerede olduğunuzu bir sayın
class recordStuff extends Thread
{
double[] aListOfDoubles;
int i = 0;
void run()
{
double newData;
newData = getNewData(); // gets data from somewhere
aListofDoubles[i] = newData; // adds it to the primitive array of doubles
i++ // increments the counter for the next pass
System.out.println("mode: " + doStuff());
}
void doStuff()
{
// Calculate the mode of the double[] array
for (int i = 0; i < aListOfDoubles.length; i++)
{
int count = 0;
for (int j = 0; j < aListOfDoubles.length; j++)
{
if (a[j] == a[i]) count++;
}
if (count > maxCount)
{
maxCount = count;
maxValue = aListOfDoubles[i];
}
}
return maxValue;
}
}
Bu, javada bir diziye eklemenin basit bir yoludur. Orijinal dizimi saklamak için ikinci bir dizi kullandım ve sonra ona bir eleman daha ekledim. Ondan sonra o diziyi orijinal diziye geri gönderdim.
int [] test = {12,22,33};
int [] test2= new int[test.length+1];
int m=5;int mz=0;
for ( int test3: test)
{
test2[mz]=test3; mz++;
}
test2[mz++]=m;
test=test2;
for ( int test3: test)
{
System.out.println(test3);
}
Java'da dizi boyutu sabittir, ancak dizini ve for döngüsünü kullanarak sabit boyutlu bir diziye dinamik olarak öğeler ekleyebilirsiniz. Lütfen aşağıdaki örneği bulun.
package simplejava;
import java.util.Arrays;
/**
*
* @author sashant
*/
public class SimpleJava {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
try{
String[] transactions;
transactions = new String[10];
for(int i = 0; i < transactions.length; i++){
transactions[i] = "transaction - "+Integer.toString(i);
}
System.out.println(Arrays.toString(transactions));
}catch(Exception exc){
System.out.println(exc.getMessage());
System.out.println(Arrays.toString(exc.getStackTrace()));
}
}
}