2013-08-09 26 views
17

Ví dụ, nếu bạn đã cóDo ArrayLists có chứa các loại đối tượng khác nhau sử dụng lượng bộ nhớ khác nhau?

int a=2; int b=3; 
    ArrayList<Integer>integers=new ArrayList<Integer>(); 
    integers.add(a); integers.add(b); 

String c="cow"; String d="deer"; 
    ArrayList<String> strings= new ArrayList<String>(); 
    strings.add(c); strings.add(d); 

Họ sẽ mất số tiền khác nhau của bộ nhớ? Bất kỳ trợ giúp/câu trả lời nào sẽ được đánh giá cao, cảm ơn!

+1

Ví dụ thứ hai của bạn thiếu thông số chung ... –

+10

Danh sách mua sắm cho 100 quả bóng đá có nhiều giấy hơn danh sách mua sắm cho 100 quả bóng golf không? –

+1

@ChrisCudmore Giải thích tuyệt vời .. –

Trả lời

48

Bản thân ArrayLists không là gì ngoài tập hợp các tham chiếu và các bộ nhớ này có cùng dung lượng bộ nhớ (nếu cùng kích thước) bất kể loại đối tượng mà chúng giữ. Tuy nhiên, các mục được ArrayList nhắc đến đều lấy lượng bộ nhớ khác nhau như bạn mong đợi.

7

Trong trường hợp của bạn, và về lý thuyết, chúng sẽ tiêu thụ cùng một lượng bộ nhớ, trong thời gian chạy generics "không tồn tại" và cả hai mảng thực sự là mảng của các đối tượng.

+0

... do đó tất cả các đối tượng sử dụng cùng một lượng bộ nhớ. 1 = 0! – Thomas

+3

Vâng 0! == 1 ... – jnovacho

+1

@jnovacho Điểm tốt. Hãy để tôi cải cách ... 1 = 0 \! – Thomas

0
ArrayList arr = new ArrayList<Foo>(10); 

arr chỉ chứa 1 tham chiếu của mảng sao lưu. Mảng sao lưu này sẽ có 10 tài liệu tham khảo của 10 đối tượng Foo khác nhau trong heap.

+0

Bạn đang bối rối mảng với 'ArrayList's. Chỉ cần sử dụng hàm tạo 'int' không làm cho danh sách chứa bất cứ thứ gì. Nó chỉ là công suất ban đầu. 'ArrayList' sử dụng một mảng nội bộ. Dung lượng ban đầu chỉ xác định kích thước của mảng này. '' chỉ dành cho an toàn kiểu (đọc generics). – adarshr

+0

Bạn nói đúng, cảm ơn và cố định. – rocketboy

10

ArrayLists là gì, nhưng một tập hợp các tài liệu tham khảo, do đó kích thước của ArrayList không phụ thuộc vào loại đối tượng mà nó trỏ đến. Do đó bộ nhớ của ArrayList không phụ thuộc vào kiểu đối tượng tham chiếu.

-1

ArrayList là một đối tượng như String hoặc smth khác. Nó lưu trữ bộ sưu tập trong một mảng Object [] bên trong. Những mảng này sẽ có số lượng khác nhau nếu bộ nhớ nhưng bản thân ArrayList sẽ có cùng kích thước.

Các vấn đề liên quan