Я довольно новичок в Java, поэтому мои знания довольно ограничены. Я работаю над личным проектом, где я пытаюсь использовать некоторые методы, используемые в Guava для создания представлений/преобразований коллекций. Я создал класс под названием «Вид», чтобы взять введенный набор в качестве возвращаемого итеративного файла и преобразовать его, а затем представить его как только для чтения итерации. (а не сборник, хотя я не думаю, что это имеет большое значение для этого вопроса). Вот краткий пример его использования ...Как я могу повторно использовать коллекции, которые будут использовать один и тот же фоновый итератор?
public class Node {
public enum Change implements Function<Node, Coordinate> {
TO_COORDINATE;
@Override public Coordinate apply(Node node) {
return new Coordinate(node);
}
}
private HashSet<Node> neighborNodes = new HashSet<Node>();
//various other members
public View<Coordinate> viewNeighborCoordinates() {
return new View<Coordinate>(neighborNodes, Change.TO_COORDINATE);
}
}
теперь, если какой-либо метод хочет использовать viewNeighborCoordinates() этого узла, а затем какой-то другой метод также хочет viewNeighborCoordinates() этого узла, кажется, расточительно всегда возвращать новые объекты, не так ли? Я имею в виду, что любое количество вещей должно иметь возможность обмениваться ссылкой на представление той же поддержки, которая повторяется с тем же преобразованием, поскольку все, что они делают, это чтение через него. Существует ли установленный способ управления общим пулом объектов, которые могут быть «интернированы», например, «Строки»? Просто нужно сделать какой-то ViewFactory, который хранит список запущенных списков, и каждый раз, когда кто-то хочет просмотра, он проверяет, имеет ли он уже этот вид и передает его? (что еще более эффективно)?
Это возможно, но вряд ли будет полезно. Обтекание объекта вокруг объекта дешево (вероятно, дешевле, чем поиск существующего эквивалентного представления), и если вы не ожидаете одновременного одновременного использования огромного количества одинаковых представлений, это не поможет в использовании памяти. – user2357112
Кроме того, вы смешиваете итераторы и итерации. – user2357112
извините, изменил его на поддержку итерации. – ubanerjea