Как объявить массив разных типов данных
Я работаю над массивами в java, и у меня есть вопрос.
Я знаю, что массив в java представляет собой набор похожих типов данных, как показано ниже
int[] x = new int[]{1,2,3};
Выше декларация может быть прочитана как массив Integer, который представляет собой набор целых типов.
Рассмотрим это
Object[] x = new Object[]{1,2,3,"srk"};
Вот, могу ли я сказать, что выше это массив, который представляет собой набор типов данных, похожих на данные.
Или
Это массив объектов аналогичных типов данных i.e.., objects.
Я путаюсь и скептически отношусь к этому.
В java можно ли создать массив или любую коллекцию, которая может содержать разные типы данных?
Ответы
Ответ 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 и т.д.