ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
ArrayList(int capacity)Практически все методы класса являются реализацией абстрактных методов из суперклассов и интерфейсов. Методы интерфейса List<E> позволяют вставлять и удалять элементы из позиций, указываемых через отсчитываемый от нуля индекс: void add(int index, E element) – вставляет element в позицию, указанную в index; void addAll(int index, Collection<? extends E> c) – вставляет в вызывающий список все элементы коллекции с,начиная с позиции index; E get(int index) – возвращает элемент в виде объекта из позиции int indexOf(Object ob) – возвращает индекс указанного объекта; E remove(int index) – удаляет объект из позиции index; E set(int index, E element) – заменяет объект в позиции index, возвращает при этом удаляемый элемент; List<E> subList(int fromIndex, int toIndex) – извлекает часть коллекции в указанных границах. Удаление и добавление элементов для такой коллекции представляет собой ресурсоемкую задачу, поэтому объект ArrayList<E> лучше всего подходит для хранения неизменяемых списков. /* пример # 1: создание параметризованной коллекции: DemoGeneric.java */ package chapt10; import java.util.*;
public class DemoGeneric { public static void main(String args[]) { ArrayList<String> list = new ArrayList<String>(); // ArrayList<int> b = new ArrayList<int>(); // ошибка компиляции list.add("Java"); list.add("Fortress"); String res = list.get(0); /* компилятор “знает” тип значения */ // list.add( new StringBuilder("C#") ); // ошибка компиляции // компилятор не позволит добавить “посторонний” тип System. out. print(list); } } В результате будет выведено: [Java, Fortress] В данной ситуации не создается новый класс для каждого конкретного типа и сама коллекция не меняется, просто компилятор снабжается информацией о типе элементов, которые могут храниться в list. При этом параметром коллекции может быть только объектный тип. Следует отметить, что указывать тип следует при создании ссылки, иначе будет позволено добавлять объекты всех типов. /* пример # 2: некорректная коллекция: UncheckCheck.java */ package chapt10; import java.util.*;
public class UncheckCheck { public static void main(String args[]) { ArrayList list = new ArrayList(); list.add(71); list.add(new Boolean("TruE")); list.add("Java 1.6.0");
// требуется приведение типов int i = (Integer)list.get(0); boolean b = (Boolean)list.get(1); String str = (String)list.get(2); for (Object ob: list) System. out. println("list " + ob);
ArrayList<Integer> s = new ArrayList<Integer>(); s.add(71); s.add(92); // s.add("101");// ошибка компиляции: s параметризован for (Integer ob: s) System. out. print("int " + ob); } } В результате будет выведено: List 71 List true List Java 1.6.0 Int 71 Int 92 Чтобы параметризация коллекции была полной, необходимо указывать параметр и при объявлении ссылки, и при создании объекта. Объект типа Iterator может использоваться для последовательного перебора элементов коллекции. Ниже приведен пример заполнения списка псевдослучайными числами, подсчет с помощью итератора количества положительных и удаление из списка неположительных значений. /* пример # 3: работа со списком: DemoIterator.java */ package chapt10; import java.util.*; public class DemoIterator { public static void main(String[] args) { ArrayList<Double> c = new ArrayList<Double>(7); for (int i = 0;i < 10; i++) { double z = new Random().nextGaussian(); c.add(z); //заполнение списка } //вывод списка на консоль for (Double d: c) { System. out. printf("%.2f ",d); } int positiveNum = 0; int size = c.size(); //определение размера коллекции //извлечение итератора Iterator<Double> it = c.iterator();
//проверка существования следующего элемента while (it.hasNext()) { //извлечение текущего элемента и переход к следующему if (it.next() > 0) positiveNum++; else it.remove(); //удаление неположительного элемента } System. out. printf("%nКоличество положительных: %d ", positiveNum); System. out. printf("%nКоличество неположительных: %d ", size - positiveNum); System. out. println("\nПоложительная коллекция"); for (Double d: c) { System. out. printf("%.2f ",d); } } } В результате на консоль будет выведено: 0,69 0,33 0,51 -1,24 0,07 0,46 0,56 1,26 -0,84 -0,53 Количество положительных: 7 Количество отрицательных: 3 Не нашли, что искали? Воспользуйтесь поиском:
|