Ben aşağıdaki gibi bir arraylist dizi oluşturmak istiyorum:
ArrayList<Individual>[] group = new ArrayList<Individual>()[4]
Ama derleme değil. Bunu nasıl yapabilirim?
Ben aşağıdaki gibi bir arraylist dizi oluşturmak istiyorum:
ArrayList<Individual>[] group = new ArrayList<Individual>()[4]
Ama derleme değil. Bunu nasıl yapabilirim?
Yanıtlar:
Gereğince Oracle Belgeleri :
"Parametreli türler dizileri oluşturamazsınız"
Bunun yerine şunları yapabilirsiniz:
ArrayList<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>(4);
Tom Hawting - tackline tarafından önerildiği gibi, yapmak daha da iyidir:
List<List<Individual>> group = new ArrayList<List<Individual>>(4);
List<List<Individual>> group = new ArrayList<List<Individual>>();
muhtemelen daha iyi olurdu.
Diğerlerinin de belirttiği gibi, ArrayList'i depolamak için başka bir liste kullanmak muhtemelen daha iyidir, ancak bir dizi kullanmanız gerekiyorsa:
ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];
ArrayList<String>[] group = new ArrayList[4]
) 'a tercih edilmesinin herhangi bir nedeni var mı? Oyuncular ekstra ekstra ne yapıyor?
new ArrayList<?>[N]
Ham tür kullanmaktan kaçınmak için kullanmalısınız.
Bu çalışıyor:
ArrayList<String>[] group = new ArrayList[4];
ArrayList<String>
yerine ArrayList<NotString>
) dışında herhangi bir Nesnenin bir ArrayList'inin group
derlenmemesi
Note: hello.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details.
ArrayList'i genişleten bir sınıf oluşturabilirsiniz
class IndividualList extends ArrayList<Individual> {
}
ve sonra diziyi
IndividualList[] group = new IndividualList[10];
Tamamen anlamıyorum, neden herkes özellikle bu soru için dizi üzerinde genel türü öneriyor.
İhtiyacım n
farklı arraylistleri endekslemekse ne olur ?
El ile nesneleri oluşturmak veya listeler veya başka bir şekilde oluşturmak için bir for döngüsü koymak List<List<Integer>>
gerektiğini bildirerek , herhangi bir şekilde liste oluşturmak benim görevim olacaktır .n
ArrayList<Integer>
n
n
Döküm olarak beyan etmek harika değil mi List<Integer>[] = (List<Integer>[]) new List<?>[somenumber]
? Bunu, tüm indeksleme nesnesini (arraylistler) tek başına oluşturmak zorunda olmadığı iyi bir tasarım olarak görüyorum.
Herkes neden bu (dizi formu) kötü bir tasarım olacağını aydınlatabilir ve dezavantajları nelerdir?
ArrayList Dizisi oluşturabilirsiniz
List<Integer>[] outer = new List[number];
for (int i = 0; i < number; i++) {
outer[i] = new ArrayList<>();
}
Bu, böyle senaryolarda yardımcı olacaktır. Dış olanın boyutunu biliyorsunuz. Ancak iç kısımların boyutu değişir. Burada, boyutu değişen Dizi listeleri içeren bir sabit uzunluk dizisi oluşturabilirsiniz. Umarım bu sizin için yararlı olacaktır.
In Java 8 ve üzeri sen çok daha iyi bir şekilde yapabilirsiniz.
List<Integer>[] outer = new List[number];
Arrays.setAll(outer, element -> new ArrayList<>());
Yöntem referansı kullanarak daha da iyi
List<Integer>[] outer = new List[10];
Arrays.setAll(outer, ArrayList :: new);
ArrayList::new
çağıracaktır ArrayList(int)
. Böylece, büyük veya küçük boyutlu dizilerle sonuçlanacaksınız, kullanımınıza bağlı olarak. Bunu kullanmaktan vazgeçiyorum ve bunun yerine lambda ifadenizde yapıcıyı kendiniz çağırdığınız ikinci yaklaşımı tercih ederim.
Bu ArrayList dizisi çalışır. Nasıl çalıştığını anlamaya çalışın.
import java.util.*;
public class ArrayOfArrayList {
public static void main(String[] args) {
// Put the length of the array you need
ArrayList<String>[] group = new ArrayList[15];
for (int x = 0; x < group.length; x++) {
group[x] = new ArrayList<>();
}
//Add some thing to first array
group[0].add("Some");
group[0].add("Code");
//Add some thing to Secondarray
group[1].add("In here");
//Try to output 'em
System.out.println(group[0]);
System.out.println(group[1]);
}
}
Bazı kodlar için Kelvincer'e verilen krediler.
Bu durumdaki sorun, bir arraylist kullanarak, belirli bir konuma eklemek için o (n) 'nin zaman karmaşıklığına sahip olmanızdır. Bir dizi kullanırsanız, dizinizi bildirerek bir bellek konumu oluşturursunuz.
Genel tür dizisi oluşturamazsınız. ArrayLists Listesi Oluştur:
List<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>();
veya GERÇEKTEN dizi gerekiyorsa (UYARI: kötü tasarım!):
ArrayList[] group = new ArrayList[4];
Oluşturma ve başlatma
Object[] yourArray = new Object[ARRAY_LENGTH];
Yazma erişimi
yourArray[i]= someArrayList;
dahili ArrayList öğelerine erişmek için:
((ArrayList<YourType>) yourArray[i]).add(elementOfYourType); //or other method
Okuma erişimi
dizi öğesini i bir ArrayList kullanım türü döküm olarak okumak için:
someElement= (ArrayList<YourType>) yourArray[i];
dizi elemanı için i: j dizinindeki ArrayList öğesini okumak için
arrayListElement= ((ArrayList<YourType>) yourArray[i]).get(j);
List [] listArr = yeni ArrayList [4];
Çizginin üstünde uyarı verir, ancak çalışır (yani Array of ArrayList oluşturur)
Sprite konumları için bir dizi ArrayLists'i statik olarak Puan olarak bildirmek için:
ArrayList<Point>[] positionList = new ArrayList[2];
public Main(---) {
positionList[0] = new ArrayList<Point>(); // Important, or you will get a NullPointerException at runtime
positionList[1] = new ArrayList<Point>();
}
dinamik:
ArrayList<Point>[] positionList;
int numberOfLists;
public Main(---) {
numberOfLists = 2;
positionList = new ArrayList[numberOfLists];
for(int i = 0; i < numberOfLists; i++) {
positionList[i] = new ArrayList<Point>();
}
}
Buradaki uyarılara ve bazı karmaşık önerilere rağmen, aynı türden ilgili ArrayLists'i temsil etmek için zarif bir çözüm olarak bir dizi ArrayLists buldum.
ArrayList<Integer>[] graph = new ArrayList[numCourses]
İşe yarıyor.
Bunu daha kolay kullanıyorum ...
static ArrayList<Individual> group[];
......
void initializeGroup(int size)
{
group=new ArrayList[size];
for(int i=0;i<size;i++)
{
group[i]=new ArrayList<Individual>();
}
Bunu yapabilirsiniz :
// ArrayList türünde bir Array oluşturma
`ArrayList<Integer>[] a = new ArrayList[n];`
// Dizideki her öğe için bir ArrayList yapın
for(int i=0; i<n; i++){
a[i] = new ArrayList<Integer>();
}
ArrayList<String> al[] = new ArrayList[n+1];
for(int i = 0;i<n;i++){
al[i] = new ArrayList<String>();
}
bir Liste [] oluşturabilir ve bunları for döngüsü ile başlatabilirsiniz. hatasız derler:
List<e>[] l;
for(int i = 0; i < l.length; i++){
l[i] = new ArrayList<e>();
}
arrayList [] l ile de çalışır.
l.length
for-döngüsünde tanımsız. Bu bir çalışma zamanı hatası olabilir.