сделать ArrayList только для чтения - PullRequest
54 голосов
/ 10 марта 2010

В Java, как вы можете сделать ArrayList доступным только для чтения (чтобы никто не мог добавлять элементы, редактировать или удалять элементы) после инициализации?

Ответы [ 4 ]

107 голосов
/ 10 марта 2010

Передайте ArrayList в Collections.unmodifiableList(). Возвращает неизменяемое представление указанного списка. Используйте только это возвращенное List, а не оригинальное ArrayList.

4 голосов
/ 29 июня 2015

Передать объект списка в Collections.unmodifiableList().См. Пример ниже.

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.");
    }
}
1 голос
/ 14 марта 2016

Передайте объект коллекции его эквивалентной неизменяемой функции класса Collections. Следующий код показывает использование 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);
    }

}

так же, как вы можете создавать и другие коллекции, которые нельзя изменить

1 голос
/ 10 марта 2010

Вы уверены, что хотите использовать ArrayList в этом случае?

Может быть, было бы лучше сначала заполнить ArrayList всей вашей информацией, а затем преобразовать ArrayList в окончательный массив при инициализации Java-программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...