2011-01-12 68 views
7

Khi làm một cái gì đó giống nhưTạo một "cái nhìn" của một Java Danh sách

// creating list1, adding items 
LinkedList slist = new LinkedList(); 
slist = subList(list1, 2,5); 

tôi sẽ có một đối tượng thứ hai (gọi là "bản sao" của các yếu tố 2-5 của "danh sách") trả về bởi sublist và chứa trong slist. Tuy nhiên, tôi muốn có một cái gì đó mà chỉ mang lại cho tôi một "cái nhìn" của list1, mà không cần tạo một đối tượng mới và không phân bổ bộ nhớ mới, vì lý do hiệu suất/bộ nhớ.

Trả lời

12

Tôi nghĩ List#subList thực hiện chính xác những gì bạn muốn:

Trả một cái nhìn của phần danh sách này giữa fromIndex quy định, toàn diện và toIndex, độc quyền. (Nếu fromIndex và toIndex bằng nhau, danh sách trả về trống.) Danh sách trả về được hỗ trợ bởi danh sách này, vì vậy các thay đổi phi cấu trúc trong danh sách được trả về được phản ánh trong danh sách này và ngược lại.

List slist = list1.subList(2, 5); 

Tất nhiên, một (wrapper) đối tượng mới cần được tạo ra, nhưng các cấu trúc dữ liệu cho danh sách, và tất cả các yếu tố sẽ được tái sử dụng. Trình bao bọc chỉ theo dõi các con trỏ bắt đầu và kết thúc.

+0

Ah, vì vậy việc tạo "slist" sẽ chỉ tạo đối tượng bao bọc? – ptikobj

+0

Có, 'slist' sẽ cần phải có một số bộ nhớ được phân bổ cho nó, nhưng nó không duy trì một bản sao của danh sách ban đầu, chỉ là con trỏ vào nó. – Thilo

+0

và phần bộ nhớ được phân bổ này sẽ không quá lớn so với danh sách, đúng không? nó có thể sẽ chỉ chứa tham chiếu "đầu tiên" và "cuối cùng" của danh sách phụ. – ptikobj

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