2013-05-03 75 views
19

Tôi đang làm việc trên mảng trong java và tôi đã có một câu hỏi. Tôi biết rằng một mảng trong java là một bộ sưu tập các kiểu dữ liệu tương tự, như hình dưới đâyLàm thế nào để khai báo một loạt các kiểu dữ liệu khác nhau

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

Trên tuyên bố có thể được đọc như một mảng Integer mà là một bộ sưu tập các kiểu nguyên.

Xem xét việc này

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

Ở đây, tôi có thể nói rằng ở trên là một mảng mà là một bộ sưu tập các kiểu dữ liệu dis-tương tự. Hoặc
Đó là một mảng Đối tượng có các loại dữ liệu tương tự, ví dụ: đối tượng.

Tôi đang lúng túng và hoài nghi về điều này. Trong java, có thể tạo một mảng hoặc bất kỳ loại bộ sưu tập nào có thể chứa các kiểu dữ liệu khác nhau không?

+1

tôi có thể kiểm tra xem nó nhưng, tôi nghĩ rằng nó sẽ tốt hơn để kết luận sau khi nhận được những lời khuyên chuyên gia như bạn ạ. – srk

+0

Đóng câu hỏi này, nếu có. – srk

+3

@duffymo, Việc xử lý JDK là một chuyên gia chỉ hoạt động cho những thứ mà hầu hết các triển khai JDK có khả năng đồng ý và sẽ không gây ra những trường hợp lạ như biến mảng trong Java. –

Trả lời

22

TẤT CẢ các đối tượng trong Java mở rộng Đối tượng.

Do đó nó có thể được hoàn toàn không mô tả khi bạn tạo mảng bằng cách tuyên bố nó một mảng các đối tượng:

Object[] arr = new Object[6]; 

Mã này tạo ra một mảng các đối tượng có độ dài 6.

Vì vậy, ví dụ, bạn có thể tạo một mảng trong đó các mục nhập theo cặp hai. Trong trường hợp này, đối tượng đầu tiên là một String và thứ hai là một số nguyên.

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

Bây giờ nếu bạn muốn thực sự tìm ra những gì các đối tượng này là sau đó nó sẽ đòi hỏi một dàn diễn viên:

int x = (Integer)arr[1]; 
+1

'int x = arr [1] .intValue();' sẽ không hoạt động vì không có phương thức 'intValue()' trên 'Object'. –

+0

Cảm ơn Mike vì đã chỉ ra. –

2

Trong java, là nó có thể tạo ra một mảng hoặc bất kỳ loại bộ sưu tập có thể chứa các loại dữ liệu khác nhau?

Có.

"Bộ sưu tập không đồng nhất" là thuật ngữ thường được sử dụng nhất cho điều này và
what is the point of heterogenous arrays? thảo luận chúng trong java. Đối với các loại bộ sưu tập, bạn có thể sử dụng List<Object> mà bạn có thể thêm nhiều loại đối tượng và List<?> có thể nhận nhiều loại danh sách nhưng bạn không thể thêm vào vì type variance.


Phương sai của mảng Java là một chút kỳ lạ mặc dù vì

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

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

vì vậy khi bạn thấy một Object[] bạn cần phải biết rằng nó đã được tạo ra thông qua new Object[] cho nó là an toàn để sử dụng như một mảng dị thể. Điều này không giống như Collection<Object> nơi hệ thống kiểu cung cấp cho bạn mức độ an toàn.

0

Trong Java bạn có thể tạo một mảng các đối tượng

Object[] x = new Object[10]; 

và bạn có thể gán tham chiếu đến các trường hợp của bất kỳ lớp đến các yếu tố của nó kể từ khi bất kỳ lớp trong Java là một Object.

Nhưng nó khác với các mảng nguyên thủy. int[] có thể chứa chỉ int yếu tố, long[] chỉ long s, vv

3

Nó hoạt động chính xác như bạn nghĩ:

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

Output:

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

Tạo một Object [] array là một cách để làm đi. Nếu không, bạn có thể tạo một lớp với các biến mà bạn muốn, và có một mảng các đối tượng của lớp đó.

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

Sau đó, sử dụng arr nơi bạn muốn.

4

Để thêm vào các câu trả lời khác, bạn có thể đặt bất cứ điều gì bạn muốn trong một mảng các đối tượng. Nhưng nếu bạn muốn truy cập bất kỳ phương thức hoặc thuộc tính nào, không được chia sẻ với Object, thì một phần tử cụ thể có, sau đó bạn phải bỏ qua nó thành loại cần thiết vì Java sẽ nhận ra nó là loại Object - đây là điều bạn phải cẩn thận với.

Ví dụ:

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 
Các vấn đề liên quan