Trong Java, làm cách nào bạn có thể tạo một chỉ đọc ArrayList
(để không ai có thể thêm thành phần, chỉnh sửa hoặc xóa các phần tử) sau khi khởi tạo?làm cho ArrayList Chỉ đọc
44
A
Trả lời
86
Chuyển ArrayList vào Collections.unmodifiableList(). Nó trả về một khung nhìn không thể sửa đổi của danh sách được chỉ định. Chỉ sử dụng danh sách trả về này, và không bao giờ là ArrayList gốc.
0
Bạn có chắc chắn muốn sử dụng ArrayList
trong trường hợp này không?
Có thể tốt hơn hết nên điền ArrayList
với tất cả thông tin của bạn, sau đó chuyển đổi ArrayList
thành mảng cuối cùng khi chương trình Java khởi tạo.
2
Chuyển đối tượng danh sách tới Collections.unmodifiableList(). Xem bên dưới ví dụ mẫu.
import java.util.*;
public class CollDemo
{
public static void main(String[] argv) throws Exception
{
List stuff = Arrays.asList(new String[] { "a", "b" });
List list = new ArrayList(stuff);
list = Collections.unmodifiableList(list);
Set set = new HashSet(stuff);
set = Collections.unmodifiableSet(set);
Map map = new HashMap();
map = Collections.unmodifiableMap(map);
System.out.println("Collection is read-only now.");
}
}
0
Vượt qua các đối tượng bộ sưu tập để chức năng unmodifiable tương đương của bộ sưu tập lớp mã sau đây cho thấy sử dụng unmodifiableList
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Temp {
public static void main(String[] args) {
List<Integer> objList = new ArrayList<Integer>();
objList.add(4);
objList.add(5);
objList.add(6);
objList.add(7);
objList = Collections.unmodifiableList(objList);
System.out.println("List contents " + objList);
try {
objList.add(9);
} catch(UnsupportedOperationException e) {
e.printStackTrace();
System.out.println("Exception occured");
}
System.out.println("List contents " + objList);
}
}
cùng cách bạn có thể tạo các bộ sưu tập khác unmodifiable cũng
- Bộ sưu tập .unmodifiableMap (bản đồ);
- Bộ sưu tập.unmodifiableSet (set);
Các vấn đề liên quan
- 1. Đọc InputStream to Arraylist
- 2. C# làm cho tập tin đọc/ghi từ chỉ đọc
- 3. Làm cho bộ đệm sâu chỉ đọc
- 4. meld: Làm cho một phần chỉ đọc
- 5. Điều kiện làm cho chỉ đọc cho WPF DataGridCell
- 6. Chỉ truyền ArrayList làm giá trị và không tham chiếu
- 7. ConcurrentModificationException cho ArrayList
- 8. ArrayList indexOf() trả về chỉ mục sai?
- 9. Chỉ mục ArrayList ngoài giới hạn
- 10. ArrayList chứa một ArrayList
- 11. java ORM cho chỉ đọc DB
- 12. "Chỉ đọc" tài sản accessor trong C#
- 13. loại Generic cho ArrayList của ArrayLists
- 14. Java ArrayList cho các số nguyên
- 15. Vượt qua Arraylist làm đối số cho hàm
- 16. Truyền ArrayList làm tham số
- 17. Tìm chỉ mục trong một ArrayList có chứa một chuỗi
- 18. Bảng là 'chỉ đọc'
- 19. Java ArrayList thay thế tại chỉ mục cụ thể
- 20. Trừ một arrayList khỏi một arrayList
- 21. SVN: Làm thế nào để làm cho một tập tin chỉ đọc với subversion?
- 22. Làm thế nào để làm cho từ điển chỉ đọc bằng Python
- 23. In ArrayList
- 24. Người dùng chỉ đọc một lần cho svn
- 25. Viết cho một phiên chỉ đọc trong MVC 3+
- 26. Giao dịch cho quyền truy cập DB chỉ đọc?
- 27. ArrayList Unrolling
- 28. Mở tệp chỉ đọc
- 29. WTForms hỗ trợ cho thuộc tính chỉ đọc đầu vào?
- 30. Từ Arraylist to Array
"... và chỉ sử dụng Danh sách trả lại và không bao giờ là bản gốc" ArrayList' "là một bổ sung rất quan trọng ở đây! Việc chuyển 'ArrayList' vào phương thức đó không thay đổi đối tượng một cách kỳ diệu. Nó chỉ trả về một wrapper unmodifiable. –
@Joachim Sauer - điểm tuyệt vời! –
Đôi khi bạn muốn giữ nguyên bản gốc 'ArrayList'. Đây có thể là một kỹ thuật tuyệt vời để hiển thị một dạng xem dữ liệu giống như 'List' được gói gọn trong một đối tượng. Sửa đổi đối tượng sẽ cập nhật chế độ xem 'Danh sách', nhưng chính chế độ xem không chấp nhận bất kỳ sửa đổi nào. – Matthew