Soru Java'daki ilkel dizilerin ArrayListine yerleştirildikten sonra ilkel diziyi geri alma


List<double[]> x = new ArrayList<double[]>();
x.add(new double[]={1,2,3,4,54,6});  

element 1,2,3,4,54,6 x eklenir

x.get(0) ---> returns 1

Ama bunu yapmak, dizi adresi eklenir mi? niye ya

     List<double[]> x = new ArrayList<double[]>();
    double[] name=new double[5];
    name[0]=1
    name[1]=3;
    name[2]=3;
        .
        . 
        . 
        .
    x.add(name);
    getting x.get(0) ---> returns @as12cd2 (address of the array)

29
2017-08-27 20:41


Menşei


Bu özel bir şey değil, dizi listenin tek öğesi. Beni şaşırtan şey, ilk örnekte görünüşte bazı kutudan çıkarmanın yapıldığı ve listenin içerdiği double elemanlar yerine double[] olması gerektiği gibi. Bu tam olarak garip ve hatalara yol açabilir. get(...) dönmesi bekleniyor double[] derleme zamanında ama döndürür double işlem esnasında. - Egor Hans


Cevaplar:


Çünkü List oluşuyor double[] yerine double.

Çünkü double[] bir dizidir, bu diziden de konumu belirtmeniz gerekir. Öyle:

x.get(0)[0]

Eğer sadece kullanmak istersen x.get(), sizin List yapılmış olmalı double ilkel. Daha sonra dizi ekleyebilirsiniz doubles göre List ayrı bir yöntem kullanarak (yerleşik olanı bilmiyorum):

List<Double> addArray(List<Double> o, double[] a) {
  for(Double d : a)
    o.add(d);

  return o;
}

Umarım bu mantıklıdır. Mantığı daha net hale getirmek için kısa değişken isimleri kullanmayı seviyorum. Değişkenlerin ne olduğunu bildiğiniz sürece, iyi olmalısınız.


6
2017-08-27 20:45



Liste sadece nesneleri saklayabilir, böylece Double yerine double kullanmanız gerekecektir - n00begon
Bu oldukça mantıklı, ancak ilk örneğin neden çalıştığını açıklamıyor. Bu mantıkla, ikinciyle aynı sonuca sahip olmalı, çünkü double[] liste de kullanılır. - Egor Hans
Ayrıca, varolan bir listeye bir dizi eklemek için yerleşik tek bir yöntem yoktur, ancak tek satırda çalışır doubleList.addAll(Arrays.asList(doubleArray). @ N00begon 'un aşağıdaki yanıtına bakın. - Egor Hans


Listenizi iki kat diziler yerine çiftleri depolamak istiyorsanız, listenin ne sakladığını değiştirin.

List<Double> doubleList = new ArrayList<Double>();

Ardından diziyi dizi listenizde bir liste olarak ekleyebilirsiniz; bu, listenin diziden ziyade değerleri depoladığı anlamına gelir. Bu size size get(0) dizi adresi yerine 1 vereceğim

Double[] doubleArray = {1.0, 2.0, 3.0, 4.0, 54.0, 6.0 };
doubleList.addAll(Arrays.asList(doubleArray));
doubleList.get(0); //gives 1.0

57
2017-08-27 20:50



Dizinin eklenmesi basitleştirmek mümkündür: doubleList.addAll (Arrays.asList (1.0, 2.0, 3.0, 4.0, 54.0, 6.0)); - sasha_trn
@sasha_trn Katılıyorum, sadece açıklığa kavuşturdum. - n00begon


double[] dizi nesnedir. Yani, adres alırsınız ve tüm dizi 0 dizinine eklenir.

Kullanabilirsin Arrays.toString(x.get(0)) okunabilir dizi baskısı almak için.

Bir dizi için toString () yazdırılır, ardından dizinin öğelerinin veri türünü temsil eden bir karakter ve ardından @ adresi hafıza adresidir.


3
2017-08-27 20:42



OP bir dizi yazdırmak istemiyor. Dizinin neden kutulu değil, tek bir öğe olarak eklendiğini merak ediyor. Yukarıda işaret edildiği gibi, liste saklamak çünkü double[]. Ve bir arayışın unsurlarını bir listeye eklemenin bir yolu da gösterilir. - Egor Hans


Varsayılan toString() herhangi birinin uygulanması Object (I dahil ederek double[]) Nesne adresinin geri dönüşüdür. Kodunuz tarafından yazdırılan budur.


1
2017-08-27 20:45



Sorunun konusu bu değil. Kodun arasındaki satırları okuyarak, OP'nin dizinin nasıl yazdırıldığı konusunda şaşırmadığını, bunun yerine dizinin kutuya tek bir öğe olmaksızın kutuya yerleştirildiğini fark edersiniz. Şu anda en fazla 2 cevabın (@Jon ve @ n00begon tarafından) nedenleri çok iyi açıklanmaktadır. - Egor Hans