Я хочу создать массив arraylist, как показано ниже:
ArrayList<Individual>[] group = new ArrayList<Individual>()[4]
Но это не компиляция. Как я могу это сделать?
Я хочу создать массив arraylist, как показано ниже:
ArrayList<Individual>[] group = new ArrayList<Individual>()[4]
Но это не компиляция. Как я могу это сделать?
"Вы не можете создавать массивы параметризованных типов"
Вместо этого вы можете сделать:
ArrayList<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>(4);
Как было предложено Tom Hawting - tackline, это даже лучше сделать:
List<List<Individual>> group = new ArrayList<List<Individual>>(4);
Как уже упоминалось, вероятно, лучше использовать другой список для хранения ArrayList, но если вам нужно использовать массив:
ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];
Это работает:
ArrayList<String>[] group = new ArrayList[4];
Вы можете создать класс, расширяющий ArrayList
class IndividualList extends ArrayList<Individual> {
}
а затем создайте массив
IndividualList[] group = new IndividualList[10];
Я полностью не понимаю, почему все предлагают тип genric над массивом, особенно для этого вопроса.
Что делать, если мне нужно индексировать n
разных arraylists.
С объявлением List<List<Integer>>
мне нужно создать объекты n
ArrayList<Integer>
вручную или поместить цикл for для создания списков n
или каким-либо другим способом, в любом случае всегда будет моей обязанностью создавать n
списки.
Разве это не здорово, если объявить его кастом как List<Integer>[] = (List<Integer>[]) new List<?>[somenumber]
. Я считаю, что это хороший дизайн, когда самому не нужно создавать весь объект индексирования (arraylists)
Может кто-нибудь просветить меня, почему это (arrayform) будет плохой дизайн и каковы его недостатки?
Вы можете создать массив ArrayList
List<Integer>[] outer = new List[number];
for (int i = 0; i < number; i++) {
outer[i] = new ArrayList<>();
}
Это будет полезно в таких сценариях, как это. Вы знаете размер внешнего. Но размер внутренних меняется. Здесь вы можете создать массив фиксированной длины, который содержит изменяющиеся по размеру списки массивов. Надеюсь, это будет полезно для вас.
В Java 8 и выше вы можете сделать это гораздо лучше.
List<Integer>[] outer = new List[number];
Arrays.setAll(outer, element -> new ArrayList<>());
Еще лучше использовать ссылку на метод
List<Integer>[] outer = new List[10];
Arrays.setAll(outer, ArrayList :: new);
Проблема с этой ситуацией заключается в использовании arraylist, вы получаете временную сложность o (n) для добавления в определенной позиции. Если вы используете массив, вы создаете ячейку памяти, объявляя ваш массив, поэтому он постоянно
Это работает массив ArrayList. Попробуйте понять, как это работает.
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]);
}
}
Кредиты для Kelvincer для некоторых кодов.
Вы не можете создать массив родового типа. Создать список массивов:
List<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>();
или если вам действительно нужен массив (ПРЕДУПРЕЖДЕНИЕ: плохой дизайн!):
ArrayList[] group = new ArrayList[4];
Создание и инициализация
Object[] yourArray = new Object[ARRAY_LENGTH];
Доступ к записи
yourArray[i]= someArrayList;
для доступа к элементам внутреннего ArrayList:
((ArrayList<YourType>) yourArray[i]).add(elementOfYourType); //or other method
Доступ для чтения
для чтения элемента массива я в качестве литья типа использования ArrayList:
someElement= (ArrayList<YourType>) yourArray[i];
для элемента массива i: для чтения элемента ArrayList при индексе j
arrayListElement= ((ArrayList<YourType>) yourArray[i]).get(j);
Чтобы объявить массив ArrayLists статически, например, для спрайтов в виде точек:
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>();
}
динамически:
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>();
}
}
Несмотря на предостережения и некоторые сложные предложения здесь, я нашел массив ArrayLists как элегантное решение для представления связанных ArrayLists того же типа.
Вы можете создать как это
ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];
Вам нужно создать массив не общего типа, а затем включить его в общий.
Я считаю, что это проще в использовании...
static ArrayList<Individual> group[];
......
void initializeGroup(int size)
{
group=new ArrayList[size];
for(int i=0;i<size;i++)
{
group[i]=new ArrayList<Individual>();
}
ArrayList<String>[] lists = (ArrayList<String>[])new ArrayList[10];
Вы можете сделать это:
//Создаем массив типа ArrayList
`ArrayList<Integer>[] a = new ArrayList[n];`
//Для каждого элемента массива make ArrayList
for(int i=0; i<n; i++){
a[i] = new ArrayList<Integer>();
}
Список [] listArr = новый ArrayList [4];
Над строкой выдает предупреждение, но он работает (т.е. Создает массив ArrayList)
ArrayList<String> al[] = new ArrayList[n+1];
for(int i = 0;i<n;i++){
al[i] = new ArrayList<String>();
}
ArrayList<Integer>[] graph = new ArrayList[numCourses]
Он работает.
вы можете создать список [] и инициализировать их для цикла. он компилируется без ошибок:
List<e>[] l;
for(int i = 0; i < l.length; i++){
l[i] = new ArrayList<e>();
}
он также работает с arrayList [] l.