Как я могу поделиться элементами между ArrayList и TreeSet в Java? - PullRequest
2 голосов
/ 11 июля 2011

Я хочу изменить элементы ArrayList и TreeSet одновременно.

Пример.Когда я изменяю элемент из TreeSet, соответствующий элемент в Arraylist также изменяется.

Ответы [ 2 ]

2 голосов
/ 11 июля 2011

В Java объекты в коллекциях хранятся со своими ссылками. Поэтому, если вы изменяете объект, он будет обновляться везде, где на него ссылаются. Вы не должны беспокоиться об этом.

Чтобы использовать оба синхронизированных, вы должны реализовать новый класс, вот шаблон:

class MyCollection{
    private TreeSet treeSet;
    private ArrayList arrayList;

    public synchronized void add(Object o){
        treeSet.add(o);
        arrayList.add(o);
    }
}

Вещи, которые я рассмотрел выше:

  • Внутренние коллекции хранятся в тайне, принцип наименьших привилегий.
  • synchronized ключевое слово для обеспечения согласованного многопоточного параллелизма.

Вещи, которые я не учел выше:

  • Общие типы
  • метод add должен возвращать boolean, как и все java Collection s.

Вы должны реализовать свой собственный код для лучшего решения, но, как правило, это идея.

РЕДАКТИРОВАТЬ: Другое решение состоит в том, чтобы написать свои собственные обертки TreeSet и ArrayList (которые используют treeset и arraylist внизу) и, когда что-то добавлено, так как вы переопределите этот add() метод, вы можете добавить другая вещь. Но это не практика слабой связи. Может быть, есть другое решение с помощью Observer Framework.

2 голосов
/ 11 июля 2011

Пока вы добавляете один и тот же объект к обоим, это именно то, что должно произойти. (Я что-то упустил?)

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