Хранение нескольких объектов в одном элементе массива в Java

#java #arrays

#java #массивы

Вопрос:

Возможно ли хранить несколько объектов в одном элементе массива, и если да, то какой способ лучше всего подходит для этого?

Ответ №1:

Нет. Любой данный элемент массива — это всего лишь один элемент. Однако тип элемента имеет значение.

Рассмотрим массив целых чисел:

 int[] x = {1, 4, 7, 10};
  

Один элемент не может «содержать» несколько элементов.

Но теперь рассмотрим массив массивов целых чисел:

 int[][] x = {
    {1},
    {2, 3},
    {4, 5, 6},
    {7, 8, 9, 10}
};
  

Каждый элемент по-прежнему является всего лишь одним элементом. Существует четыре элемента каждого типа int[] . Затем каждый из этих объектов имеет по одному элементу на элемент. Теоретически у вас может быть столько слоев, сколько вы хотите. Это может очень быстро запутать.

Другим способом поместить «несколько элементов в один элемент» было бы написать свой собственный класс, который содержит несколько элементов любым наиболее полезным для вас способом, и создать из них массив.


Примечание: выше я использовал примитивные массивы для демонстрации. Однако это также работает с объектами Java List :

 ArrayList<Integer> x;  // list of integers

ArrayList<ArrayList<Integer>> x;  // list of ArrayList<Integer> objects, each of which is itself a list of integers

ArrayList<Integer>[] x;  // primitive array of ArrayList<Integer> objects
                         // (I recommend not doing this, it can get confusing)
  

Если ваш вопрос заключается в том, чтобы поместить несколько типов объектов в один элемент, то вам нужно выяснить, какой суперкласс охватывает оба типа (обычно Object , если типы отдаленно отличаются), и составить свой список этого типа:

 Object[] x = {Integer.valueOf(5), Double.valueOf(3.14), "some_string"};
  

Вернуть эти объекты обратно и привести их к правильному типу сложно, поэтому я не рекомендую это.

Вы также можете попробовать создать свой собственный Union тип и сделать список таким типом.

Ответ №2:

Вы можете хранить что угодно в Object[] массиве объектов.

Что-то вроде этого:

 Object[] objArr = new Object[10];
objArr[0] = "String";
objArr[1] = Arrays.asList(1, 2, 4);
objArr[2] = new ArrayList<>(); 
objArr[3] = 1;