2012-05-17 3 views
3

Эти методы возвращают СОХРАНЕННЫХ Collection, поскольку изменения в одной коллекции влияет на другие коллекции. [Вид написать через процесс]Что такое Backed Collection в Java?

headSet(e, b)  Returns a subset ending at element e and exclusive of e 

headMap(k, b)  Returns a submap ending at key k and exclusive of key k 

tailSet(e, b)  Returns a subset starting at and inclusive of element e 

tailMap(k, b)  Returns a submap starting at and inclusive of key k 

subSet(s, b, e, b) Returns a subset starting at element s and ending just before element e 

subMap(s, b, e, b) Returns a submap starting at key s and ending just before key e 

Тогда в чем разница с Arrays.asList() методом? Метод копирует массив в список. API говорит «изменения в возвращенном списке« write through »в массив & наоборот».

Итак, это слишком опирающаяся коллекция? Если это так, то есть метод toArray() в интерфейсе List - это тоже резервная коллекция?

Есть ли какой-либо другой метод, например Arrays.asList(), который позволяет писать? Как я могу узнать, позволяет ли метод писать через или нет, только видя подпись метода?

ответ

7

Да, Arrays.asList возвращает список, поддерживаемый массивом, потому что он не делает копию, но Collection.toArray делает копию, поэтому она не подкрепляется коллекцией.

Вы не можете определить, возвращает ли метод коллекцию, поддерживаемую ее входами, только из подписи - только из документации. Обычно это документируется с использованием слов «поддержанный», «вид» или тому подобное. Существует много примеров: List.subList, например, Collections.newSetFromMap и многие другие - а также множество примеров в сторонних библиотеках.

+0

+1 Возможно, вы захотите упомянуть часто используемые значения 'keySet' /' values', а также 'headMap' /' subMap'/'tailMap' виды карты деревьев. – dasblinkenlight

+0

Ну, честно говоря, 'headMap',' subMap' и 'tailMap' уже упоминались OP. –

+0

Вы правы, он это сделал! Я не читал список примеров из вопроса, поэтому я пропустил эти три. – dasblinkenlight