2015-09-02 6 views

cevap

13

Listenizi sıfırlarla doldurmak için Collections.fill(List<? super T> list,T obj) yöntemini kullanabilirsiniz. Durumunuzda new ArrayList<>(40) ayarını yapıyorsunuz, burada 40 listenin uzunluğu değil, başlangıç ​​kapasitesi. Listenizi içindeki tüm sıfırlarla oluşturmak için diziyi kullanabilirsiniz. Kod parçası takip edin.

Integer [] arr = new Integer[40]; 
ArrayList<Integer> myList= new ArrayList<>(Arrays.asList(arr)); 
Collections.fill(myList, 0);//fills all 40 entries with 0 
System.out.println(myList); 

ÇIKIŞ Orada

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
3

kullanın .add(0) olsun. ArrayList(int capacity) yapıcısı, başlangıç ​​öğelerini değil, başlangıç ​​kapasitesini ayarlar. Yani listeniz hala boş.

+1

'Arrays.asList (new int [40])' Listeyi 'döndürdüğünüzü unutmayın, böylece yukarıdaki ifadeniz derleme zamanı hatası verecektir. –

0

Bunun yerine ayarlamak yerine eklendi olabilir. myList.add çalışacaktır. Bu dizinde zaten bir giriş var ise ayarlayabilirsiniz. set yöntemi yalnızca bu dizinde bulunan içeriği değiştirir.

ArrayList<Integer> myList = new ArrayList<Integer>(Collections.nCopies(40, 0)); 

YA:
Check api documentation for set method here

9

Collections.nCopies() deneyin

List<Integer> myList = Collections.nCopies(40, 0); 

Bkz doc

+0

Bu bana göre daha uygundur. +1 Güzel biri. –

+1

İkinci örneğin, değişmez bir liste döndürdüğünü unutmayın; bu, muhtemelen ilk örnekte gösterildiği gibi bir ArrayList'e sarılmasının nedenidir. – glaed

+1

Bu kabul edilen cevap olmalı! –

0

Java 8 uygulaması:

ArrayList<Integer> list = IntStream.of(new int[40]) 
        .boxed() 
        .collect(Collectors.toList()); 
+2

'Collections.nCopies' çok daha iyi – ZhekaKozlov