powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / submap(): он копирует элементы основного map'a или хранит ссылки на них ?
9 сообщений из 9, страница 1 из 1
submap(): он копирует элементы основного map'a или хранит ссылки на них ?
    #38295365
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

В доке сказано:submap()Returns a view of the portion of this map whose keys range from fromKey to toKey. <...> The returned map is backed by this map, so changes in the returned map are reflected in this map, and vice-versa
В тоже время, в ководстве по сдаче SCJP (SCJP Sun Certified Programmer for Java 6 Exam 310-065.pdf) на странице 627 упорно говорится про копию элементов исходного map'а.

По сырцам видно, что вызывается вот этот метод:
Код: java
1.
2.
3.
4.
5.
        AscendingSubMap(TreeMap<K,V> m,
                        boolean fromStart, K lo, boolean loInclusive,
                        boolean toEnd,     K hi, boolean hiInclusive) {
            ==>super(m, fromStart, lo, loInclusive, toEnd, hi, hiInclusive);
        }


Я правильно понимаю, что при вызове submap() на самом деле создает копию элементов исходной коллекции и поддерживает уже равенство их с элементами исходного мапа "на лету" ? И что никакого "view" тут нет на самом деле, оно в доке "для красноречия" прилеплено - так ?
...
Рейтинг: 0 / 0
submap(): он копирует элементы основного map'a или хранит ссылки на них ?
    #38295373
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В обоих доках всё правильно написано. Вы зачем-то зациклились на слове copy вместо того чтобы понять чуть написаного.
Ни какой речи о "копировании элементов" иди вообще не может. Коллекция понятия не имеет как правильно создавать копии своих элементов. Возможно вы имели ввиду Map.Entry? Но они тоже никак не копируются, это легко можно посмотреть в исходнике.
Речь идёт именно о view. Как показывает пример, добаление в одну из коллекция приводит к появлению элемента в другой.
...
Рейтинг: 0 / 0
submap(): он копирует элементы основного map'a или хранит ссылки на них ?
    #38295407
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

у мну слово 'view' вызывает стойкие ассоциации с чем-то типа хранимого запроса СУБД :-) Который, ясное дело, никаких данных не хранит.
BlazkowiczВозможно вы имели ввиду Map.Entryнет, вопрос именно про submap().
Если я всё неверно понял, то объясните, плз, почему в офиц. доке нельзя было по-пролетарски написать про КОПИЮ, как это сделано в SCJP-ководстве ?
...
Рейтинг: 0 / 0
submap(): он копирует элементы основного map'a или хранит ссылки на них ?
    #38295411
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozzmosissubmap(): он копирует элементы основного map'a или хранит ссылки на них ?Хранит ссылки на них.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
public static class Type implements Comparable<Type> {
	String a;
	
	public Type(String a) {
		this.a = a;
	}

	@Override
	public int compareTo(Type o) {
		return a.compareTo(o.a);
	}
}

SortedMap<Type, Type> smap = new TreeMap<>();
smap.put(new Type("1"), new Type("11"));
smap.put(new Type("2"), new Type("22"));
smap.put(new Type("3"), new Type("33"));
smap.put(new Type("4"), new Type("44"));
for (Type key: smap.keySet()) {
	System.out.println(key);
}
System.out.println();
SortedMap<Type, Type> submap = smap.subMap(new Type("1"), new Type("4"));
for (Type key: submap.keySet()) {
	System.out.println(key);
}
submap.put(new Type("1"), new Type("111"));
System.out.println();
System.out.println(smap.get(new Type("1")).a);


...
Рейтинг: 0 / 0
submap(): он копирует элементы основного map'a или хранит ссылки на них ?
    #38295412
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozzmosisу мну слово 'view' вызывает стойкие ассоциации с чем-то типа хранимого запроса СУБД :-) Который, ясное дело, никаких данных не хранит.

submap View treemap работает аналогично и сама по себе данных не хранит, а только ссылки на исходную коллекцию.

ozzmosisЯ правильно понимаю, что при вызове submap() на самом деле создает копию элементов исходной коллекции

Не знаю как вы это понимаете Но сформулировали совершенно не правильно.

ozzmosisBlazkowiczВозможно вы имели ввиду Map.Entryнет, вопрос именно про submap().

Я про цитату выше о "копировании элементов". Что вы под этим поздразумевате?

ozzmosisЕсли я всё неверно понял, то объясните, плз, почему в офиц. доке нельзя было по-пролетарски написать про КОПИЮ, как это сделано в SCJP-ководстве ?
Потому что нет никакой "копии". Я же говорю, не зацикливайтесь на этом слове. Читайте остальное. А то выглядит так, как будто вы в тексте нашли единственное знакомое слово - copy и на его основе нафантазировали поведение коллекции.
...
Рейтинг: 0 / 0
submap(): он копирует элементы основного map'a или хранит ссылки на них ?
    #38295424
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczЯ про цитату выше о "копировании элементов". Что вы под этим поздразумевате?Под "копированием элементов" понимаю создание новой коллекции и заполнение её новыми объектами (с такими же <K,V>, что в исходной коллекции). Вместо записи ссылок на существующие элементы исходной коллекции.

Но прогнав у себя код Usman'a - разобрался, всё понятно. Дока говорит правду, ководство же сбивает с толку многократным упоминанием 'copy'. Надеюсь, только меня сбивает, а остальным всё сразу становится ясно :-)
...
Рейтинг: 0 / 0
submap(): он копирует элементы основного map'a или хранит ссылки на них ?
    #38295430
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozzmosisПод "копированием элементов" понимаю создание новой коллекции и заполнение её новыми объектами
Новые объекты в Java делаются 3мя способами
- конструктор - требует от знания семантики констуктора
- клонирование - требует Cloneable
- десериализация
Ничего из вышеперечисленного коллекция не делает.
...
Рейтинг: 0 / 0
submap(): он копирует элементы основного map'a или хранит ссылки на них ?
    #38295431
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozzmosisНо прогнав у себя код Usman'a - разобрался, всё понятно.
В SCJP руководстве тоже пример кода достаточно доходчивый.
...
Рейтинг: 0 / 0
submap(): он копирует элементы основного map'a или хранит ссылки на них ?
    #38295440
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczВ SCJP руководстве тоже пример кода достаточно доходчивый.В нём выводятся ключи и значения элементов (лошади с собаками и их "коды" вида a,b,c,...), а не адреса, как в примере Usman'a. Именно отсутствие адресов и привело к непониманию.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / submap(): он копирует элементы основного map'a или хранит ссылки на них ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]