java tutorial - Руководство Java Collections Framework - учебник java - java programming - учиться java - java basics - java for beginners



1- Введение

  • Коллекция это стандартная идея программы и языка программирования. Приложение часто работает с коллекцией, как например коллекцией информации работников, коллекцией фото, ...Java так же как и другие языки программирования поддерживает массив (array) как самую стандартную коллекцию. Но работа с массивом в разных ситуациях не является удобной, так как время существования массива, увеличение элементов или удаление элементов очень сложно, даже нужно высоко заплатить для эффективности программы если это преднамеренно.
  • Изображение ниже иллюстрирует массив:

2- Первый пример

  • Сначала, мы выполним пример с LinkedList, это список, количество элементов которого могут быть изменены, не имеют лимит как массив.

HelloLinkedList.java

package org.wikitechy.tutorial.javacollection.helloworld;
 
import java.util.LinkedList;
 
public class HelloLinkedList {
 
    public static void main(String[] args) {
        // Создать объект LinkedList.
        LinkedList<String> list = new LinkedList<String>();
 
        // Добавить некоторые элементы в список.
        list.add("F");
        list.add("B");
        list.add("D");
        list.add("E");
        list.add("C");
 
        // Добавить элемент в конец списка.
        list.addLast("Z");
 
        // Добавить элемент в начало списка.
        list.addFirst("A");
 
        // Вставить элемент в позиции только с индексом 1.
        list.add(1, "A2");
 
        // Записать все элементы списка:
        System.out.println("Original contents of list: " + list);
 
        // Удалить элемент из списка
        list.remove("F");
 
        // Удалить элемент  в позиции только с индексом  2.
        list.remove(2);
 
        // Распечатаь список после удаления 2 элементов.
        System.out.println("Contents of list after deletion: " + list);
 
        // Удалить первый и последний элемент в списке.
        list.removeFirst();
        list.removeLast();
 
        // Распечать список после удаления.
        System.out.println("List after deleting first and last: " + list);
 
        // Получить элемент у индекса 2.
        Object val = list.get(2);
 
        // Перенастроить элемент у индекса 2.
        list.set(2, (String) val + " Changed");
        System.out.println("List after change: " + list);
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Результаты запуска примера:
 связанный список демо
java - джава - учиться java - учебник java -
связанный список демо
- примеры java - java-программы
  • Пример с HashMap. Это объект содержащий пары ключей и значений (Key-Value). Например телефонная книга, где номер телефона это ключ, а информация абонента это значение. Ключи не должны совпадать.

HelloHashMap.java

package org.wikitechy.tutorial.javacollection.helloworld;
 
import java.util.HashMap;
 
public class HelloHashMap {
 
    public static void main(String[] args) {
 
        // Создать объект HashMap хранящий пары, код сотрудников и зарплаты.
        // String key: Код сотрудников
        // Float value: Зарплата.
        HashMap<String, Float> salaryMap = new HashMap<String, Float>();
      
 
        salaryMap.put("E01", 1000f);
        salaryMap.put("E02", 12000f);
        salaryMap.put("E03", 12300f);
        salaryMap.put("E04", 1000f);
        salaryMap.put("E05", 300.5f);
         
        // Получить зарплату сотрудника 'E02'
        Float salary= salaryMap.get("E01");
        System.out.println("Salary of employee E01 = "+ salary);
         
        // Обновить зарплату сотрудника 'E05'
        salaryMap.put("E05", 400f);
         
        System.out.println("Salary of employee E05 = "+ salaryMap.get("E05"));
          
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Результаты запуска примера:

3- Лимиты при использовании массива - Предложение решения проблемы.

3.1- Массив - стандартный набор.

  • Массив является стандартным и знакомым.
    • хранит ссылочный вид, примитивные виды
    • int[] myArray=new int[]{1,4,3};
    • Object[] myArrayObj =new Object[]{"Object",new Integer(100)};
  • Массив имеет определенные размеры
    • Это затрудняет расширение массива
  • Элементы расставлены и ссылаются поочередно в памяти.
    • Это затрудняет удаления элемента из массива.

3.2- Удаление элемента из массива.

  • Элементы массива расставлены поочередно в памяти, это сложность, когда вы намеренно удаляете определенный элемент в массиве, он теряет свою очередность. Обычно, используется техника создания нового массива для хранения объектов старого массива и убрать ненужные элементы, но это снижает эффективность программы. В случае расширения массива используется индентичная техника, это создать новый массив с большим размером, потом скопировать элементы старого массива в новый массив.
  • Очевидно, что массив это не хороший способ для разных случаев применения.

3.3- Связанный список

  • Связанный список ( Linked List) это один из способов управления списка данных, который поборол недостаток массива. Конечно для управления списком в Java есть многие другие способы, например ArrayList.
  • Смотрите недостатки LinkedList:
  • Элементы в этом списке могут быть прерывисто изолированы (непостоянны) в памяти.
  • Это двустороняя связь между элементами.
  • Каждый элемент в списке имеет ссылку к элементу напротив и к элементу сзади.

LinkedList is a two-way link.

  • Элемент Link это объект, содержащий данные которыми вам нужно управлять (data), и имеет 2 ссылки к элементам Link спереди и элементам Link сзади.
  • Remove an element from LinkedList
  • Удалить элемент из LinkedList это тоже самое что убрать человека стоящего в очереди. Два человека стоящие рядом с этим человеком должны обновить информацию людей стоящих спереди и сзади них.
  • Добавить элемент в LinkedList (Добавить в конец или середину списка)
  • Несмотря на то что мы имеем только один пример связанного списка, он помогает нам понять больше про пакет java.util.

4- Обзор Java Collections Framework

  • Зная ограничения сразу при версии 1.0 java добавил class java.util.Vector это class хранящий список объектов. И java.util.Hashtable это class хранящий пары key/value (ключ/значение) . После этого, Java2 platform продолжил ознакомление со способами доступа к коллекция, называется Collections Framework. java.util.Vector, java.util.Hashtable так же существует и сейчас является частью той большой платформы. Эти коллекции построены на основании некоторых интерфейсов в пакете java.util. И разделены на 2 иерархические системы, которые лидируются с помощью 2 интерфейсов java.util.Collection содержащие список объектов и java.util.Map содержащие пары key/value.

4.1- Интерфейсы в Java Collections Framework

  • Изображение выше это важные интерфейсы Java Collections Framework. Мы поговорим о целях использования этих интерфейсов и их группировании по целям и способам использования. В пакете ava.util class-ы применяют один или более интерфейсов. Поэтому определенный class в java.util может иметь разные функции. Например java.util.HashMap:

** Hashtable **

public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда

** Vector **

public class Vector<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда

4.2- Две иерархии лидируемые 2 интерфейсами Collection и Map - Методы хранения данных

  • Группа Collection хранит объекты.
  • Есть 3 подветки в группе Collection: Queue, List, Set .
  • Элементы могут быть похожими или независят от 3-х перечисленных веток. (Более детально будет обсуждено позже) .
  • Группа Map хранит пары key/value
  • Пары key/value содержащиеся в Map (карта) это всегда разные key между парами
  • Если мы знаем key, можем получить значение value в Map соответстующий с этим key.
  • Группа Collection хранит данные в виде ссылки, группа Map хранит пары key/value.
Collection<String> c=new ArrayList<String>();
// Добавить элемент в коллекцию.
c.add("One");
 
 
Map<Integer,String> m=new LinkedHashMap<Integer,String>();
Integer key=new Integer(123);
String value="One two three";
 
// Добавить паку 'key/value' в Map m.
// Если 'key' уже существует, 'value' будет заменен новым значением.
m.put(key,value);
 
// Распечатывает значение соответствующее с 'key' (ключ).
System.out.println(m.get(new Integer(123));
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда

4.3- Интерфейсы итератора и интерфейс RandomAccess - Метод получения доступа к данным

java.util.Iterator

  • Похож на итератор для получения данных, способ запроса по очереди с одного элемента к другому.

java.util.RandomAccess

  • Случайный метод запроса, например для позиции элемента и получения этого элемента в наборе
  • Например java.util.Vector применяет этот интерфейс, может получить случайный элемент vector.get(int index).
  • Группа Collection тоже может иметь доступ поочередно вызывая метод iterator() для получения объекта Iterator .
  • java.util.Collection расширен из интерфейса java.lang.Iterable (может повториться) поэтому унаследовал метод public Iterator iterator().
  • На иллюстрации выше имеется 2 Interface Iterator & RandomAccess, он представляет 2 способа доступа в элементы коллекции.See Vector class:

** Vector **

public class Vector<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Vector принадлежит группе Collection, вы можете получить доступ к ее элементам через Iterator и можно получить случайный доступ через метод get(index).
  • Заметка: Для объектов в группе List вы так же можете получить объект ListIterator, этот итератор позволяет вам переместить назад или вперед позицию курсора на списке, вместо того чтобы перемещать только вперед как в Iterator

5- Collection Group

5.1- Interfaces в группе Collection

  • 3 прямых подинтерфейса в Collection это Queue, List, Set при этом Queue добавлен из версии 1.5 и считается ожидающимся в очереди. Queue так же имеет подинтерфейс это BlockingQueue, этот интерфейс принадлежит пакету java.util.concurrent, мы не будет обсуждать это в данной статье. Queue это интерфейс с разными понятиями и способов организации элементов, которым нужно больше всего внимания. Три интерфейса Queue , List , Set можно считать 3-мя ветками в группе Collection , перед тем как перейти к деталям каждой группы посмотрим обзор интерфейса Collection.
 Java интерфейс
java - джава - учиться java - учебник java -
Java интерфейс
- примеры java - java-программы

5.2- java.util.Collection Interface

  • Наследственная связь:

** java.util.Collection **

public interface Collection<E> extends java.lang.Iterable<E> {
 
   //
   // Add element to collection
   // return true if this collection changed as a result of the call
   //
   boolean add(E o);
 
   //
   // Adds all of the elements in the specified collection to this collection.
   // return true if this collection changed as a result of the call
   //
   boolean addAll(Collection<? extends E> c);
 
   // Removes all of the elements from this collection (optional operation).
   // The collection will be empty after this method returns.
   void clear();
 
   // Returns true if this collection contains the specified element.
   boolean contains(Object o);
 
   // Returns true if this collection contains all of the elements
   // in the specified collection.
   boolean containsAll(Collection<?> c);
 
   // Compares the specified object with this collection for equality
   boolean equals(Object o);
 
   int hashCode();
 
   // Returns true if this collection contains no elements.
   boolean isEmpty();
 
   //
   // Removes a single instance of the specified element from this
   // collection, if it is present (optional operation).
   //
   boolean remove(Object o);
 
   // Removes all of this collection's elements that are also contained in the
   // specified collection (optional operation)
   boolean removeAll(Collection<?> c);
 
   //
   // Retains only the elements in this collection that are contained in the
   // specified collection (optional operation)
   //
   boolean retainAll(Collection<?> c);
 
   // Returns the number of elements in this collection
   int size();
 
   // Returns an array containing all of the elements in this collection
   Object[] toArray();
 
   <T> T[] toArray(T[] a);
 
   // Returns an iterator over the elements in this collection.
   Iterator<E> iterator();
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда

5.3- Получить доступ к элементам коллекции

  • Iterator это способ утверждения над элементами коллекции.
  • Например использовать Iterator для получения доступа к элементам Collection.

CollectionAndIterator.java

package org.wikitechy.tutorial.javacollection.collection;
 
import java.util.Collection;
import java.util.Iterator;
import java.util.Vector;
 
public class CollectionAndIterator {
 
    public static void main(String[] args) {
 
        // Создать пустой объект Collection.
        // Создать коллекцию содержащую только String.
        Collection<String> coll = new Vector<String>();
        coll.add("Collection");
        coll.add("Queue");
        coll.add("List");
        coll.add("Map");
 
        // Распечатать количество элементов данной коллекции (collection).
        System.out.println("Size:" + coll.size());
 
        // Получить объект Iterator для получения доступа в элементы коллекции.
        // Этот объект Iterator содержит только String.
        Iterator<String> ite = coll.iterator();
 
        // Проверить имеет ли Iteractor следующие элементы или нет?
        while (ite.hasNext()) {
            // Получить элементы в позиции курсора
            // Потом переместить курсор на 1 шаг.
            String s = ite.next();
            System.out.println("Element:" + s);
        }
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Результаты запуска примера:
 очередь итератор java
java - джава - учиться java - учебник java -
очередь итератор java
- примеры java - java-программы

5.4- Подветка Collection

  • Как упомянуто выше, Collection имеет 3 подинтерфейса это Queue , List и Set. И разница между ними это способ хранения данных
 очередь коллекции Java
java - джава - учиться java - учебник java -
очередь коллекции Java
- примеры java - java-программы

List

  • Список ( List) это упорядоченный список объектов, там где одинаковые объекты могут появиться один или много раз. Например: [1, 7, 1, 3, 1, 1, 1, 5]. И вы можете сказать про "номер N" в списке. Вы можете добавить элемент в любую позицию в списке, изменить элемент в любой позиции в списке, или удалить элемент из любой позиции в списке,
  • Queue

Queue

  • Очередь ( Queue) это тоже упорядоченный набор, но вы можете только прикоснуться к элементам в начале очереди. Все элементы вставленные в конце очереди и удалить первые элементы в очереди. Вы можете узнать сколько элементов в очереди, но вы не можете найти или сказать про элемент N, вы можете увидеть только когда он станет первым в очереди.

Set

  • Set это неупорядоченный набор, и не позволяет содержать дубликаты. Вы не може сказать про N-ый элемент и даже про первый элемент, так как он не имеет порядок. Вы можете добавить или удалить элементы, и можете найти если элемент существует (Например "Находится ли 7 в данном наборе?"). Примечание: SortedSet это подинтерфейс Set который может содержать элементы, имеющие порядок.

5.5- java.util.List Interface

  • List это подинтерфейс в Collection который имеет полные функции Collection так же имеет некоторый особенный функции:
    • Позволяет дублирование элементов
    • Позволяет сущетвовать 0 или более элементов null.
    • Это набор с последовательностью
  • Помимо доступа, используя Iterator можно получить доступ используя ListIterator. ListIterator позволяет перемещать позицию курсора вперед или назад.
  • // Возвращает объект ListIterator, чтобы просмотреть элементы списка.
  • public ListIterator<E> listIterator() 
  •   
  • // Возвращает объект ListIterator,
  • // для просмотра элементов с позиции с 'index' до конца списка.
  • public ListIterator<E> listIterator(int index)

ListAndListIterator.java

package org.wikitechy.tutorial.javacollection.list;
 
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
 
public class ListAndListIterator {
 
    public static void main(String[] args) {
 
        // Создать объект List (Содержащий только String).
        List<String> list = new ArrayList<String>();
        list.add("One");
        list.add("Two");
        list.add("Three");
        list.add("Four");
 
        // Получить объект ListIterator для просмотра элементов списка.
        // (Theo đúng trình tự).
        // Возвращает список iterator элементов данного списка
        // (в определенном порядке)
        ListIterator<String> listIterator = list.listIterator();
 
        // В данный момент курсор стоит на первой позиции Iterator.
        // Стоит в позиции с индексом 0.
        // Получить первый элемент в Iterator, курсор движется вперед на один шаг.
        String first = listIterator.next();
        System.out.println("first:" + first);// -->"One"
 
        // В данный момент курсор стоит в позиции с индексом 1.
        // Получить следующий элемент.
        String second = listIterator.next();
        System.out.println("second:" + second);// -->"Two"
 
        // Проверить может ли курсор перепрыгнуть назад на 1 позицию или нет.
        if (listIterator.hasPrevious()) {
            // Перепрыгнуть назад на 1 шаг.
            String value = listIterator.previous();
            System.out.println("value:" + value);// -->"Two"
        }
 
        System.out.println(" ----- ");
 
        while (listIterator.hasNext()) {
            String value = listIterator.next();
            System.out.println("value:" + value);
        }
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
 Итератор списка
java - джава - учиться java - учебник java -
Итератор списка
- примеры java - java-программы
  • Результаты запуска примера:
 Итератор списка java
java - джава - учиться java - учебник java -
Итератор списка java
- примеры java - java-программы

5.6- java.util.Set Interface

  • Set это подинтерфейс в Collection, который имеет полные функции Collection, и имеет некоторые другие функции:
  • Описывает набор который не позволяет содержать дублированные элементы
  • Позволяет существование элемента null, если есть элемент null то только 1.

HashSetExample.java

package org.wikitechy.tutorial.javacollection.set;
 
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
 
public class HashSetExample {
 
    public static void main(String[] args) {
 
        // Создать объект Set с начальной емкостью (capacity) способной содержать 10 элементов.
        // Если количество добавленных элементов превышает настоящую емкость, он повысит ее на 80%.
        // Особенностью HashSet является - добавленные элементы после будут стоять спереди.
        Set<String> set = new HashSet<String>(10, (float) 0.8);
 
        set.add("One");
        set.add("Two");
 
        // Когда происходит дупликация.
        // С HashSet: Он добавит новый элемент и удалит старый элемент.
        set.add("One");
        set.add("Three");
 
        Iterator<String> it = set.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Результаты запуска примера:

5.7- java.util.Queue Interface

  • Queue (очередь) это подинтерфейс в Collection, который имеет полные функции Collection, довольно похож на List, при этом цель использования отличается. Queue разработан чтобы вы могли получить доступ к первому элементу в очереди, и при удалении элементов, он удаляет певый элемент в очереди. Похож на очередь в супермаркете, только первый человек в очереди обслуживается, новый человек будет помещен в очередь, позиция помещения может быть не в конце. Позиция помещенного элемента зависит от вида очереди и приоритет элемента.
    • Это коллекция позволяющия элементам дублироваться.
    • Не позволяет существовать элементам null.
  • Есть два класса применяющих интерфейс Queue.
    • java.util.LinkedList
    • java.util.PriorityQueue
  • LinkedList это стандартная очередь. Но помните, что LinkedList применяет оба интерфейса List и Queue.
  • PriorityQueue хранит элементы внутри по естественному порядку элементов (если эти элементы вида Comparable), или в соответствии с Comparator настроенный для PriorityQueue.
  • Заметьте, что один class может применить оба интерфейса List и Queue, поэтому вам не нужно обращать внимания на то, как элементы расставлены внутри объекта класса выше, если вы считаете его очередью, смотрите как получить доступ к элементам в очереди. Смотрите типичные методы Queue, он симулирует очередь как линию очереди людей в супермаркете.

boolean add(E)

 Добавить логическое значение
java - джава - учиться java - учебник java -
Добавить логическое значение
- примеры java - java-программы
  • Вставляет определенный элемент в очередь если это возможно сделать сразу без лимита из-за размера очереди, возвращает true если успешно, напротив выбрасывает исключения IllegalStateException если в очереди больше нет места

boolean offer(E)

 Логическое предложение
java - джава - учиться java - учебник java -
Логическое предложение
- примеры java - java-программы

E remove()

  • Получает и удаляет первый элемент из очереди. Этот метод отличается от poll() только в том, что выбрасывает исключение, если в очереди нет элементов.

E poll()

 e голосование
java - джава - учиться java - учебник java -
e голосование
- примеры java - java-программы
  • Получаете и удаляет первый элемент в очереди, или возвращает null если в очереди нет элементов.

E element()

  • Получает, но не удаляет первый элемент в очереди. Этот метод отличается от peek(), в том что выбрасывает исключение если в очереди нет элементов.

E peek()

 e метод peek
java - джава - учиться java - учебник java -
e метод peek
- примеры java - java-программы
  • Получает, но не удаляет первый элемент в очереди, или возвращает null если в очереди нет элементов.

Comment:

  • Среди методов очереди нет такого метода, который позволил бы вам получить доступ к другим элементам в очереди, за исключением первого элемента, вы так же не може указывать местонахождение элемента, который будет вставлен.

QueueDemo.java

package org.wikitechy.tutorial.javacollection.queue;
 
import java.util.LinkedList;
import java.util.Queue;
 
public class QueueDemo {
 
    public static void main(String[] args) {
 
        Queue<String> names = new LinkedList<String>();
 
        // offer(E): Вставляет дополнительно элемент в очередь (queue).
        // С очередью LinkedList элемент будет вставлен в конце очереди.
        // Возвращает true если вставлено успешно.
        // Возвращает false если в очереди больше нет места.
        names.offer("E");
        names.offer("A");
        names.offer("M");
 
        // add(E):  Вставляет дополнительно элемент в очередь.
        // С очередью LinkedList элемент будет вставлен в конце очереди.
        // Возвращает true если вставлено успешно.
        // Выбрасывает исключение если в очереди больше нет места.
        names.add("G");
        names.add("B");
 
        while (true) {
            // Получает и удаляет первый элемент из очереди.
            // Возвращает null если большне нет элементов в очереди.
            String name = names.poll();
            if (name == null) {
                break;
            }
            System.out.println("Name=" + name);
        }
 
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Например, с очередью приоритетов PriorityQueue. Эта очередь хранит элементы внутри в соответствии с естественным порядком (если эти элементы сравниваются друг с другом - применяя Comparable) или в соответствии с Comparator настроенный для PriorityQueue.
  • String это класс применяющий интерфейс Comparable, они могут сравниваться друг с другом, и расставлены по порядку алфавита.

PriorityQueueDemo.java

package org.wikitechy.tutorial.javacollection.queue;
 
import java.util.PriorityQueue;
import java.util.Queue;
 
public class PriorityQueueDemo {
 
    public static void main(String[] args) {
 
        // С очередью(queue) PriorityQueue элемент будет распределен по естественному порядку.
        Queue<String> names = new PriorityQueue<String>();
 
        // offer(E): Вставляет дополнительно элемент в очередь (queue).
        // Возвращает true если добавлен успешно.
        // Возвращает  false если нет больше места.
        names.offer("E");
        names.offer("A");
        names.offer("M");
 
        // add(E): Вставляет дополнительно элемент в очередь (queue).
        // Возвращает true если добавлен успешно.
        // Выбрасывает Exception если очередь заполнена.
        names.add("G");
        names.add("B");
 
        while (true) {
            // poll(): Получить и удалить первый элемент из очереди.
            // Возвращает null если больше нет элементов в очереди.
            String name = names.poll();
            if (name == null) {
                break;
            }
            System.out.println("Name=" + name);
        }
 
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Результаты запуска примера:

5.8- Наследственные отношения между классами в группе Collection

 Реферативный-сборник
java - джава - учиться java - учебник java -
Реферативный-сборник
- примеры java - java-программы

5.9- java.util.ArrayList

  • ArrayList имеет полные функции интерфейса List. Одновременно, имеет возможность получать доступ к случайным элементам (Из-за наследства от интерфейса RandomAccess)
  • Это в принципе похоже на класс Vector, отличается в том, что метод Vector синхронизирован, а ArrayList нет. ArrayList подходит для одноточного приложения (1 Thread).

ArrayListDemo.java

package org.wikitechy.tutorial.javacollection.list;
 
import java.util.ArrayList;
 
public class ArrayListDemo {
 
    public static void main(String[] args) {
 
        // Объявить объект ArrayList содержаций элемент вида Integer.
        ArrayList<Integer> list = new ArrayList<Integer>(10);
 
        // Добавить элементы.
        list.add(123);
        list.add(245);
        list.add(new Integer(345));
 
        // ArrayList позволяет добавить элементы null .
        // (Особенность List)
        list.add(null);
 
        // Распечатаь элементы ArrayList.
        System.out.println("Size:" + list.size());// =4
 
        // Получить случайный доступ в элемент индекса 1.
        Integer i = list.get(1);
        System.out.println("Element index 1 =" + i);// =245
        Integer newInt = 1000;
 
        // Заменить элемент в позиции с индексом 1.
        // Этот метод возвращает старый элемент.
        Integer old = list.set(1, newInt);
        // 
        System.out.println("Old value:" + old);// =245 .
        System.out.println("New value:" + list.get(1));// =1000 .
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда

Результаты запуска примера:

 массив список демо java
java - джава - учиться java - учебник java -
массив список демо java
- примеры java - java-программы

5.10- java.util.Vector

  • Vector это класс имеющий функции похожие на ArrayList. Отличие в том, что методы Vector синхронизированы, а в ArrayList нет.
  • Vector имеет некоторые методы, которые были унаследованы от версии 1.0. Перед тем как понятие Collection Framework было упомянуто в Java.
// Legacy method from 1.0, get element at index position
// Like get(index)
public E elementAt(int index)
 
 
// Method inherited from the List interface, get element at position index.
public E get(int index)
 
// Replaces the element at the specified position in this list with the specified element
// Return old element.
// setElementAt(int,E) like set(int,E)
public void setElementAt(int index, E element);
 
// Replaces the element at the specified position in this list with the specified element
// Return old element.
public E set(int index, E element)
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда

VectorDemo.java

package org.wikitechy.tutorial.javacollection.list;
 
import java.util.Vector;
 
public class VectorDemo {
 
   public static void main(String[] args) {
      // Создать объект Vector.
      // С начальной емкостью (capacity) 10 элементов.
      // Автоматически увеличить емкость еще на 5 если количество элементов больше, чем емкость на данный момент
      Vector<Integer> v = new Vector<Integer>(10, 5);
 
      v.add(123);
      v.add(245);
      v.add(new Integer(345));
      v.add(null);
 
      // Напечатать реальное количество элементов, содержащиеся в Vecter (Не емкость)
      System.out.println("Size:" + v.size());// =4
 
      // Получить элемент в индексе 1.
      // Похоже на метод get(int).
      Integer i = v.elementAt(1);
      System.out.println("v.elementAt(1)=" + i);// 245
 
      // Заменить элемент в индексе 1.
      v.setElementAt(1, 1000);
      //
      System.out.println("New value:" + v.get(1));// =1000 .
   }
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда

5.11- java.util.SortedSet

  • SortedSet это подинтерфейс интерфейса Set, который имеет полные функции Set. SortedSet это категория наборов с расстановкой, добавленные новые элементы в категорию набора автоматически стоят на подходящем месте, чтобы удостовериться, что набор расставлен (по возрастанию или убыванию)
  • Поэтому элементы набора должны сравниваться друг с другом, они должны быть объектами java.lang.Comparable (Могут быть сравнены), Если вы добавляете элемент который не является объектом Comparable, вы получите исключение.
  • Один из классов, применяющих интерфейс SortedSet это TreeSet.
  • Будем считать класс Player (Игрок), включает информацию: имя, фамилия, количество золотых медалей, количество серебряных медалей, количество бронзовых медалей.
  • Игроки ( Player) можно сравнивать друг с другом по правилу:
  • У кого больше золотых медалей будет иметь позицию выше.
  • Если у двух человек количество золотых медалей равно, то у кого будет больше серебряных медалей, имеет позицию выше.
  • Если у двух человек количество золотых серебряных медалей равно, то у кого будет больше бронзовых медалей, имеет позицию выше.
  • Остальные будут считаться равными.

Player.java

package org.wikitechy.tutorial.javacollection.sortedset;
 
public class Player implements Comparable<Player> {
 
    private String name;
 
    private int goldMedal;
    private int silverMedal;
    private int bronzeMedal;
 
    public Player(String name, int goldMedal, int silverMedal, int bronzeMedal) {
        this.name = name;
        this.goldMedal = goldMedal;
        this.silverMedal = silverMedal;
        this.bronzeMedal = bronzeMedal;
    }
 
    // Сравнить данный Player с другим Player.
    // Возвращает значение < 0, то есть данный Player  < Player other.
    // Если возвращает значение > 0, значит данный Player > Player other
    // Если возвращает значение = 0, значит данный Player này = Player other.
    @Override
    public int compareTo(Player other) {
        // Сравнить количество золотых медалей.
        int value = this.goldMedal - other.goldMedal;
        if (value != 0) {
            return value;
        }
        // Сравнить количество серебряных медалей
        value = this.silverMedal - other.silverMedal;
        if (value != 0) {
            return value;
        }
        // Сравнить количество бронзовых медалей
        value = this.bronzeMedal - other.bronzeMedal;
        return value;
    }
 
    @Override
    public String toString() {
        return "[" + this.name + ", Gold: " + this.goldMedal //
                + ", Silver: " + this.silverMedal + ", Bronze: " //
                + this.bronzeMedal + "]";
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда

SortedSetDemo.java

package org.wikitechy.tutorial.javacollection.sortedset;
 
import java.util.SortedSet;
import java.util.TreeSet;
 
public class SortedSetDemo {
 
    public static void main(String[] args) {
 
        // Создать объект SortedSet через подкласс TreeSet
        SortedSet<Player> players = new TreeSet<Player>();
 
        Player tom = new Player("Tom", 1, 3, 5);
        Player jerry = new Player("Jerry", 3, 1, 3);
        Player donald = new Player("Donal", 2, 10, 0);
 
        // Добавить элементы в коллекцию.
        // Они будут автоматически расставлены (По возрастанию).
        players.add(tom);
        players.add(jerry);
        players.add(donald);
 
        // Напечатать элементы.
        for (Player player : players) {
            System.out.println("Player: " + player);
        }
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Результаты запуска класса SortedSetDemo:
 Сортировка набора демо
java - джава - учиться java - учебник java -
Сортировка набора демо
- примеры java - java-программы

6- Map group

6.1- Interfaces в группе Map

  • Группа Map лидируется интерфейсом java.util. Map. Этот интерфейс имеет 2 подинтерфейса java.util.SortedMap и java.util.concurrent. ConcurrentMap . ConcurrentMap не принадлежит пакету java.util он был представлен с версии java1.5, мы не будем ссылаться об этом в данной статье. Группа Map характеризуется хранением данных через пары key/value.

6.2- Классы в группе Map

6.3- java.util.Map Interface

  • Необязательные методы (Optional operation) может поддерживаться на применяемом классе или нет, в случае если не поддерживается, то может выбросить исключение UnsupportedOperationException:
import java.util.Collection;
import java.util.Map;
import java.util.Set;
 
public class MyMap<K,V> implements Map<K,V>{
 
   .....
      
     // Если вы вызываете этот метод, выбросится исключения без условий.
    @Override
    public void clear() {
        throw new java.lang.UnsupportedOperationException();        
    }  
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Но класс MyMap не поддерживает действительный смысл метода clear(). Если пользователь намеренно использует этот метод MyMap то получит исключение.

MapDemo.java

package org.wikitechy.tutorial.javacollection.map;
 
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
 
public class MapDemo {
 
    public static void main(String[] args) {
 
        Map<String, String> map = new HashMap<String, String>();
 
        map.put("01000005", "Tom");
        map.put("01000002", "Jerry");
        map.put("01000003", "Tom");
        map.put("01000004", "Donald");
 
        // Получить набор содержащий ключи (key).
        // Этот набор не будет расспределен.
        Set<String> phones = map.keySet();
 
        for (String phone : phones) {
            System.out.println("Phone: " + phone + " : " + map.get(phone));
        }
 
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Результаты запуска:
 Карта демо java
java - джава - учиться java - учебник java -
Карта демо java
- примеры java - java-программы
  • Вы можете получить доаступ данных Map через Map.Entry, смотрите иллюстрацию ниже:

MapEntryDemo.java

package org.wikitechy.tutorial.javacollection.map;
 
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
 
public class MapEntryDemo {
 
    public static void main(String[] args) {
 
        Map<String, String> map = new HashMap<String, String>();
 
        map.put("01000005", "Tom");
        map.put("01000002", "Jerry");
        map.put("01000003", "Tom");
        map.put("01000004", "Donald");
 
        // Получить набор entry.
        // Эти entry могут быть не расспределены по ключам (key).
        Set<Entry<String, String>> entries = map.entrySet();
 
        for (Entry<String, String> entry : entries) {
            System.out.println("Phone: " + entry.getKey() + " : " + entry.getValue());
        }
 
    }
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Результаты запуска примера:
 Карта ввода демо
java - джава - учиться java - учебник java -
Карта ввода демо
- примеры java - java-программы

6.4- java.util.SortedMap Interface

  • Interface SortedMap это подинтерфейс Map. Он гарантирует, что пары key/value расставлены по порядку возрастания в соответствии с key.
  • Есть только один класс в пакете java.util который применяет интерфей SortedMap, это TreeMap.
  • Это методы SortedMap:

SortedMapDemo.java

package org.wikitechy.tutorial.javacollection.sortedmap;
 
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
 
public class SortedMapDemo {
 
    public static void main(String[] args) {
 
        Map<String, String> map = new TreeMap<String, String>();
 
        map.put("01000005", "Tom");
        map.put("01000002", "Jerry");
        map.put("01000003", "Tom");
        map.put("01000004", "Donald");
 
        // Этот набор расспределен по возрастанию.
        Set<String> keys = map.keySet();
        for (String key : keys) {
            System.out.println("Phone: " + key);
        }
 
        System.out.println("-----");
 
        // Этот набор так же расспределен по key.
        Set<Map.Entry<String, String>> entries = map.entrySet();
        for (Map.Entry<String, String> entry : entries) {
            System.out.println("Phone: " + entry.getKey());
        }
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Результаты запуска примера:
 Демонстрация сортировки карта
java - джава - учиться java - учебник java -
Демонстрация сортировки карта
- примеры java - java-программы

Related Searches to Руководство Java Collections Framework