пятница, 15 октября 2010 г.

Java хитрости: На какие грабли можно наступить, если не любишь массивы.

Если честно я очень люблю листы из Java Collection Framework. Работать с ними гораздо удобнее, чем ** себе мозг с массивами, поэтому я довольно часто пользовалась методом Arrays.asList, не особо задумываясь, что при этом происходит. Точнее я просто предполагала, что оно делает нечто вроде:

List<String> list = new ArrayList<String>();
    for (String a : array)
        list.add(a);

Однако сегодня у меня наконец дошли руки посмотреть, что никакого копирования на самом деле не происходит. Arrays реализует свой ArrayList который пишет в массив, переданный ему в качестве параметра. То есть все изменения в листе приводят к изменению в массиве и наоборот. Ну и, очевидно, возвращаемый этим методом лист не является полноправной реализацией интерфейса List, ибо методы add и remove поддерживать он не может. Странно, что я ни разу не наступила до этого на грабли с удалением:)

Кстати, еще одно, уже приятное открытие - иногда очень-очень хочется создавать листы на манер массивов. А-ля:

List<A> list = new ArrayList<A>(a1, a2, a3, a4);

И вот возможный вариант:

List<A> list = Arrays.asList(a1, a2, a3, a4);

Эх, все-таки полезно читать джава доки :)

Комментариев нет:

Отправить комментарий