2010-03-10 33 views
44

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

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.

+28

"... 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. –

+0

@Joachim Sauer - điểm tuyệt vời! –

+3

Đô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

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.

+0

HI Jama, tôi tìm thấy Collections.unmodifiableList() điều này sẽ làm việc theo cách tôi muốn. thử phương pháp này, nó thẳng về phía trước – gmhk

+0

tôi sẽ ... thật tuyệt vời! – Jama22

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