2013-05-03 2 views
19

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

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

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

Рассмотрим

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

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

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

+1

я могу проверить это, но я подумал, что было бы лучше заключить после получения консультации экспертов, как вы, сэр. – srk

+0

Закройте этот вопрос, если да. – srk

+3

@duffymo. Рассмотрение JDK как эксперта работает только на те вещи, на которых большинство соглашений JDK, скорее всего, согласятся, и не будет надежно судить о странных случаях, таких как дисперсия массива в Java. –

ответ

22

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

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

Object[] arr = new Object[6]; 

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

So например, вы можете создать массив, в котором записи попадают парами из двух. В этом случае первым объектом является 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]; 
+1

'int x = arr [1] .intValue();' не будет работать, потому что на 'Object' нет метода' intValue() '. –

+0

Спасибо, Майк за то, что указали его. Исправлено –

2

В Java, можно создать массив или какой-либо коллекции который может содержать разные типы данных?

Да.

«Неоднородная коллекция» - это термин, наиболее часто используемый для этого, и
what is the point of heterogenous arrays? обсуждает их в java.

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


Дисперсия 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>, где система типов дает вам определенную степень безопасности.

0

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

Object[] x = new Object[10]; 

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

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

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 
1

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

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

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

4

Чтобы добавить к другим ответам, вы можете поместить все, что хотите, в массив объектов. Но если вы хотите получить доступ к каким-либо методам или свойствам, не разделяемым с Object, что конкретный элемент имеет, то вам нужно сбрасывать его в нужный тип, поскольку Java распознает его как тип 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 
Смежные вопросы