Существует ли базовая реализация Java Set, которая не допускает нулевые значения? - PullRequest
27 голосов
/ 26 февраля 2009

API для интерфейсов Java Set :

Например, некоторые реализации запрещают null элементы, а некоторые имеют ограничения по типам их элементов

Я ищу реализацию базового набора, которая не требует упорядочения (так как ArrayList обеспечивает интерфейс List ) и которая не разрешает null. TreeSet , HashSet и LinkedHashSet все разрешают нулевые элементы. Кроме того, TreeSet требует, чтобы элементы реализовывали Comparable .

Кажется, что в настоящее время не существует такого базового Set. Кто-нибудь знает почему? Или, если кто-то существует, где я могу его найти?

[Edit]: я не хочу разрешать null s, потому что позже в коде мой класс будет перебирать все элементы в коллекции и вызывать определенный метод. (Я на самом деле использую HashSet<MyRandomObject>). Я предпочел бы быстро потерпеть неудачу, чем потерпеть неудачу позже, или случайно понести какое-то странное поведение из-за присутствия null в наборе.

Ответы [ 14 ]

0 голосов
/ 23 августа 2012

Hashtable не допускает нулевые значения ......

0 голосов
/ 29 июня 2009

Кстати, если бы вы запросили реализацию Map, которая не допускает нулевые значения, старая java.util.Hashtable не позволяет.

0 голосов
/ 26 февраля 2009

Почему вы не хотите разрешить null?

Вы хотите вызвать исключение, если null добавлено в ваш набор? Если это так, просто сделайте что-то вроде этого:

private Set<Object> mySet = new HashSet<Object>() {
    @Override
    public boolean add(Object e) {
        if (e == null)
            throw new IllegalArgumentException("null"); // or NPE
        // or, of course, you could just return false
        return super.add(e);
    }
};

HashSet addAll() вызывает add() несколько раз, так что это единственный метод, который вам придется переопределить.

0 голосов
/ 26 февраля 2009

Я не уверен, какой тип это правда. Но не могли бы вы унаследовать от выбранной коллекции или HashTable и переопределить метод Add, выдав исключение, если элемент имеет значение null?

...