Nếu chúng ta có Type [], chúng ta chỉ có thể lưu trữ Type hoặc các kiểu con của nó trong đó. Cũng vậy với ArrayList. Vì vậy, tại sao nó nói rằng một là đồng nhất trong khi người kia thì không?Có nghĩa là các mảng Java là đồng nhất, nhưng ArrayLists thì không?
Trả lời
Mảng có kiểm tra thời gian chạy trên loại phần tử được thêm vào. Nghĩa là, nếu một phần tử mới không thuộc cùng một loại được thêm vào, thì ArrayStoreException
được ném vào thời gian chạy. Đó là lý do tại sao họ được coi là "đồng nhất".
Điều này không đúng đối với ArrayList
s (List
s nói chung). Do loại tẩy xoá trong thời gian chạy, nó thực tế có thể giữ bất kỳ đối tượng.
Sau đây ném một ngoại lệ khi chạy:
Object[] array = new String[3];
array[0] = "a";
array[1] = 1; // throws java.lang.ArrayStoreException
không giống như những điều sau đây mà biên dịch và chạy mà không có vấn đề (mặc dù với một cảnh báo trình biên dịch như nó không sử dụng đúng cách generics):
ArrayList list = new ArrayList<String>();
list.add("a");
list.add(1); // OK
list.add(new Object()); // OK
Với việc sử dụng chính xác các generics, tức là khai báo biến số list
ở trên loại ArrayList<String>
thay vì ArrayList
, vấn đề có thể tránh được tại thời gian biên dịch:
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add(1); // compilation error
list.add(new Object()); // compilation error
Nhưng ngay cả với một danh sách tổng quát công bố, bạn có thể có một cái gì đó giống như công việc này mà không có một ngoại lệ trong thời gian chạy:
ArrayList<String> list = new ArrayList<String>();
list.add("a");
Method[] methods = List.class.getMethods();
for(Method m : methods) {
if(m.getName().equals("add")) {
m.invoke(list, 1);
break;
}
}
System.out.println(list.get(0));
System.out.println((Object) list.get(1));
Output:
một
Có. Java
Arrays
là đồng nhất, bởi vì khi bạn khai báo bất kỳ mảng nào trong Java, bạn phải khai báo của nó type
. ví dụ:
int arr[]; //type is int
String arr[]; //type is String
float arr[]; //type is float
bây giờ nếu bạn cố gắng để lưu trữ bất kỳ dữ liệu kiểu khác trong mảng được khai báo, nó sẽ là một lỗi thời gian biên dịch. ví dụ:
int arr=new int[5];
arr[0]="I am a String not int"; //compile time error
nhưng ArrayList
là một phần của 's Collection
, họ giữ Objects
, thay vì bất kỳ cụ thể data-type
[nếu chúng ta không nói về generics
], và vì tất cả mọi thứ trong java là trực tiếp hoặc gián tiếp thừa hưởng từ Object
class
, vì vậy nó sẽ không cung cấp cho bạn compile-time error,
kiểm tra loại sẽ là run-time
.
ví dụ:
ArrayList al=new ArrayList();//type is Object
al.add("I am a String"); //Bacause String class in inherited from Object Class
al.add(1);//the int 1 will first autobox into Integer class then stored in al ArrayList.Now bacause Integer class is also inherited from Object class,it will*/ allow you to store
al.add(UserDefinedClass); //because every User defined class is also inherited from Object class,so it will also allow you.
Bây giờ cậu để ý, bởi vì chúng tôi chưa xác định bất kỳ kiểu dữ liệu của ArrayList al
, nhưng chúng tôi vẫn đang lưu trữ các giá trị kiểu khác nhau: đây là biết tại sao ArrayList
Stores Object
không cụ thể dữ liệu kiểu , do đó chúng không đồng nhất không đồng nhất.
- 1. "Đồng bộ hóa không nhất quán" có nghĩa là gì?
- 2. "Đồng bộ" nghĩa là gì trong Java?
- 3. numpy.ma (đeo mặt nạ) mảng có nghĩa là phương pháp có kiểu trả về không đồng nhất
- 4. Mảng hiệu suất cao có nghĩa là
- 5. Độ chính xác đồng nghĩa là gì?
- 6. % w (mảng) có nghĩa là gì?
- 7. Có nghĩa là gì khi nói Apache sinh ra một chuỗi cho mỗi yêu cầu, nhưng node.js thì không?
- 8. Đồng đô la theo sau là chỉ số có nghĩa là gì trong tên lớp?
- 9. Line.split (",") [1] có nghĩa là gì [Java]?
- 10. Colon có nghĩa là gì trong Java?
- 11. "Tiêu đề cấp không nhất quán" có nghĩa là gì?
- 12. C# Sự hoán vị của một mảng các arraylists?
- 13. Các lớp học có nghĩa là gì?
- 14. Tại sao Java ArrayLists không co tự động
- 15. java có định nghĩa chuỗi là null chấm dứt không?
- 16. Điều gì có nghĩa là "đồng bộ hóa nhanh" không được đồng bộ hóa?
- 17. Việc sử dụng CPU Java phải là 100% ... nhưng không phải là
- 18. "Hợp đồng" của một lớp nghĩa là gì
- 19. scala là 2.10.1 nhưng giao diện điều khiển sbt thì không?
- 20. Chính xác thì -1 refresh_interval trong Elasticsearch có nghĩa là gì?
- 21. Đối tượng Java có chứa các biến null là một mẫu không? Nếu vậy thì cái nào?
- 22. Chính xác thì luồng Java8 là gì?
- 23. Việc định nghĩa lại các phương thức tĩnh có nghĩa là gì trong Java?
- 24. Giá trị mảng không giống nhau (nhưng chúng là?)
- 25. "\\. \", "\ ?? \", "\\? \", "\\" có nghĩa là gì?
- 26. Có nghĩa là gì?
- 27. 4j có nghĩa là gì?
- 28. Hợp đồng đầu tiên và hợp đồng có nghĩa là gì?
- 29. '::' có nghĩa là gì?
- 30. PHP: `mảng (& $ this) 'này có nghĩa là gì?
Ai nói với bạn ArrayLists là không đồng nhất? Miễn là bạn không bỏ qua các generics, chúng chính xác là đồng nhất như mảng. (Nếu bạn * làm * bỏ qua các generics, thì có lẽ bạn nên so sánh với 'Object []'.) – user2357112
Tôi muốn đây là câu trả lời. – totoro
Mọi phần tử của bất kỳ mảng nào phải là cùng loại nguyên thủy hoặc cùng một loại tham chiếu. Mỗi phần tử của một ArrayList phải là cùng một kiểu tham chiếu. –