Подтвердить что ты не робот

Как объявить массив разных типов данных

Я работаю над массивами в java, и у меня есть вопрос. Я знаю, что массив в java представляет собой набор похожих типов данных, как показано ниже

int[] x = new int[]{1,2,3};

Выше декларация может быть прочитана как массив Integer, который представляет собой набор целых типов.

Рассмотрим это

Object[] x = new Object[]{1,2,3,"srk"};

Вот, могу ли я сказать, что выше это массив, который представляет собой набор типов данных, похожих на данные. Или
Это массив объектов аналогичных типов данных i.e.., objects.

Я путаюсь и скептически отношусь к этому. В java можно ли создать массив или любую коллекцию, которая может содержать разные типы данных?

4b9b3361

Ответ 1

ВСЕ объекты в Java расширяют Object.

Поэтому при создании массива можно объявить массив без объектов, объявив его массивом объектов:

Object[] arr = new Object[6];

Этот код создает массив объектов длиной 6.

Так, например, вы можете создать массив, в котором записи попадают парами из двух. В этом случае первым объектом является String, а второй - Integer.

Object[] arr = new Object[6];

arr[0] = new String("First Pair");
arr[1] = new Integer(1);
arr[2] = new String("Second Pair");
arr[3] = new Integer(2);
arr[4] = new String("Third Pair");
arr[5] = new Integer(3);

Теперь, если вы хотите на самом деле выяснить, что представляют собой эти объекты, для этого потребуется бросок:

int x = (Integer)arr[1];

Ответ 2

Чтобы добавить к другим ответам, вы можете поместить все, что хотите, в массив объектов. Но если вы хотите получить доступ к каким-либо методам или свойствам, не разделяемым с Object, что у определенного элемента есть, то вам нужно сбрасывать его на нужный тип, так как Java распознает его как type Object - это то, о чем вы должны быть осторожны.

Пример:

    Object test[];
    test = new Object[]{1, 2, "three", new Date()};
    System.out.println( ( (Date)test[3] ).getMonth() );
    // the above line will output '4', but there will be a compilation error
    // if the cast (Date) is emitted

Ответ 3

Он работает точно так, как вы думали:

Object[] x = new Object[]{1,2,3,"srk"};
for(Object o: x){
   System.out.println(o.getClass());
}

Вывод:

class java.lang.Integer
class java.lang.Integer
class java.lang.Integer
class java.lang.String

Ответ 4

В java можно ли создать массив или любую коллекцию, которая может содержать разные типы данных?

Да.

"Гетерогенный сбор" - это термин, наиболее часто используемый для этого, и
что такое гетерогенные массивы? обсуждает их в java.

Для типов коллекций вы можете использовать List<Object>, к которому вы можете добавить много видов объектов, и List<?>, которые могут получать много видов списков, но которые вы не можете добавить из-за дисперсия типа.


Дисперсия массивов Java немного странная, хотя, поскольку

Object[] arr = new String[3];  // OK
List<Object> list = new ArrayList<String>();  // DOES NOT COMPILE

arr[0] = Integer.valueOf(42);  // RUNTIME ERROR

поэтому, когда вы видите Object[], вам нужно знать, что он был создан с помощью new Object[], чтобы он был безопасным для использования в качестве гетерогенного массива. Это не похоже на Collection<Object>, где система типов дает вам определенную степень безопасности.

Ответ 5

Создание массива Object [] - один из способов сделать это. В противном случае вы можете создать класс с нужными вами переменными и иметь массив объектов этого класса.

class MyClass{
    int var_1;
    String var_2;
    ...
    ...
}
...
MyClass[] arr = new MyClass[3];

Затем используйте команду arr, где вы хотите.

Ответ 6

В Java вы можете создать массив объектов

Object[] x = new Object[10];

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

Но он отличается от примитивных массивов. int[] может содержать только int элементы, long[] только long s и т.д.