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

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

у мну слово 'view' вызывает стойкие ассоциации с чем-то типа хранимого запроса СУБД :-) Который, ясное дело, никаких данных не хранит.
BlazkowiczВозможно вы имели ввиду Map.Entryнет, вопрос именно про submap().
Если я всё неверно понял, то объясните, плз, почему в офиц. доке нельзя было по-пролетарски написать про КОПИЮ, как это сделано в SCJP-ководстве ?
...
Рейтинг: 0 / 0
12.06.2013, 21:04:19
    #38295411
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
submap(): он копирует элементы основного map'a или хранит ссылки на них ?
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
12.06.2013, 21:05:44
    #38295412
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
submap(): он копирует элементы основного map'a или хранит ссылки на них ?
ozzmosisу мну слово 'view' вызывает стойкие ассоциации с чем-то типа хранимого запроса СУБД :-) Который, ясное дело, никаких данных не хранит.

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

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

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

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

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

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

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


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