Философия Java


Заполнение контейнеров


Хотя проблему печати контейнеры берут на себя, заполнение контейнеров имеет те же недостатки, что и java.util.Arrays. Как и Arrays, есть общий класс, называемый Collections, который содержит статические методы утилит, включаю одну из них, называемую fill( ). Этот fill( ) также просто дублирует единственную ссылку объекта, помещая ее в контейнер, и также работает только для объектов List, а не для Set или Map:

//: c09:FillingLists.java

// Метод Collections.fill().

import java.util.*;

public class FillingLists { public static void main(String[] args) { List list = new ArrayList(); for(int i = 0; i < 10; i++) list.add(""); Collections.fill(list, "Hello"); System.out.println(list); } } ///:~

Этот метод делает мало полезного, он может только заменять элементы, которые уже внесены в List, и не добавляет новых элементов.

Чтобы быть способными создавать интересные примеры, здесь введена дополнительная библиотека Collections2 (по соглашению, часть com.bruceeckel.util) с методом fill( ), который использует генератор для добавления элементов и позволяет вам указывать число элементов, которые вы хотите добавить (add( )). Generator interface, определенный ранее, будет работать для Collection, но Map требует своего собственного интерфейса генератора, так как должны производится пары объектов (один - ключ, второй - значение) при каждом вызове next( ). Вот класс Pair:

//: com:bruceeckel:util:Pair.java

package com.bruceeckel.util; public class Pair { public Object key, value; Pair(Object k, Object v) { key = k; value = v; } } ///:~

Далее, интерфейс генератора, который производит Pair:

//: com:bruceeckel:util:MapGenerator.java

package com.bruceeckel.util; public interface MapGenerator { Pair next(); } ///:~

С этим могут быть разработан набор утилит, работающих с контейнерными классами:

//: com:bruceeckel:util:Collections2.java

// Для заполнения контейнера любого типа

//используйте объект генератора.

package com.bruceeckel.util; import java.util.*;




Начало  Назад  Вперед