Как я могу поделиться элементами между ArrayList и TreeSet в Java?

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

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

2 ответа

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

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

class MyCollection{
    private TreeSet treeSet;
    private ArrayList arrayList;

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

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

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

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

  • Общие типы
  • метод add должен вернуться boolean как все ява Collectionс

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

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

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

Другие вопросы по тегам