#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;