Из какого java-контейнера я могу легче удалять элементы, не зная индекса элемента? - PullRequest
1 голос
/ 10 марта 2011

Есть ли java-контейнер, который имеет два метода, add, remove, который принимает только элемент (не индекс)?

Я хочу сделать что-то вроде этого:

MagicContainer<Foo> mc = MagicContainer<Foo>();

mc.add(new Foo());
mc.add(someFoo1=new Foo());
mc.add(new Foo());
mc.add(someFoo2=new Foo());

mc.remove(someFoo1);
mc.remove(someFoo2);

Ответы [ 2 ]

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

Каждая Java Collection имеет метод add() и remove(), которые делают то, что вы хотите.

Поскольку Collection является интерфейсом, вам необходимо выбрать одну из реализаций (обычно это либо реализации Set, либо List). ArrayList - довольно распространенный выбор.

A HashSet является другим возможным кандидатом.

Colllection<Foo> mc = new ArrayList<Foo>();

mc.add(new Foo());
mc.add(someFoo1=new Foo());
mc.add(new Foo());
mc.add(someFoo2=new Foo());

mc.remove(someFoo1);
mc.remove(someFoo2);

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

Если вы хотите сохранить определенный порядок и получить доступ к объектам по индексу, вам потребуется реализация List. «По умолчанию» List равно ArrayList. Если вы часто удаляете / добавляете элементы в любом месте , за исключением конца, тогда LinkedList обеспечит лучшую производительность (но в большинстве случаев вы не заметите разницу).

Если вы хотите избежать дублирования объектов, вам понадобится реализация Set. Значение по умолчанию Set равно HashSet, но иногда также используется TreeSet, что дает дополнительное преимущество при наличии определенного заказа (но для этого требуется либо предоставить Comparator или убедитесь, что все элементы Comparable).

0 голосов
/ 10 марта 2011

Любая установленная реализация должна работать.

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