Коллекция это стандартная идея программы и языка программирования. Приложение часто работает с коллекцией, как например коллекцией информации работников, коллекцией фото, ...Java так же как и другие языки программирования поддерживает массив (array) как самую стандартную коллекцию. Но работа с массивом в разных ситуациях не является удобной, так как время существования массива, увеличение элементов или удаление элементов очень сложно, даже нужно высоко заплатить для эффективности программы если это преднамеренно.
Изображение ниже иллюстрирует массив:
2- Первый пример
Сначала, мы выполним пример с LinkedList, это список, количество элементов которого могут быть изменены, не имеют лимит как массив.
HelloLinkedList.java
package org.wikitechy.tutorial.javacollection.helloworld;
import java.util.LinkedList;
publicclass HelloLinkedList {
publicstaticvoid 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;
publicclass HelloHashMap {
publicstaticvoid 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.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 classHashMap<K,V> extendsAbstractMap<K,V>
implementsMap<K,V>, Cloneable, Serializable
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
** Vector **
public classVector<E> extendsAbstractList<E>
implementsList<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 classVector<E> extendsAbstractList<E>
implementsList<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-программы
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 collectionObject[]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 classCollectionAndIterator{
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-программы
5.4- Подветка Collection
Как упомянуто выше, Collection имеет 3 подинтерфейса это Queue , List и Set. И разница между ними это способ хранения данных
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 classListAndListIterator{
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-программы
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;
publicclass HashSetExample {
publicstaticvoid 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()
java - джава - учиться java - учебник java -
e голосование
- примеры java - java-программы
Получаете и удаляет первый элемент в очереди, или возвращает null если в очереди нет элементов.
E element()
Получает, но не удаляет первый элемент в очереди. Этот метод отличается от 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 classQueueDemo{
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 classPriorityQueueDemo{
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;
publicclass ArrayListDemo {
publicstaticvoid 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-программы
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)publicvoid 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;
publicclass VectorDemo {
publicstaticvoid 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;
publicclass Player implements Comparable<Player> {
privateString 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 classSortedSetDemo{
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 classMyMap<K,V> implementsMap<K,V>{
.....
// Если вы вызываете этот метод, выбросится исключения без условий.
@Override
public void clear() {
thrownew 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 classMapDemo{
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-программы
Вы можете получить доаступ данных 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 classMapEntryDemo{
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 classSortedMapDemo{
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 - команда
Related Searches to Руководство Java Collections Framework
явная структура коллекции javaколлекции в java с примерамиколлекции в вопросах интервью с javaинтерфейс коллекции в javaколлекции в javaколлекции в javatpointиерархия коллекции в javaразница между коллекцией и коллекциямиколлекции в java с примерами для новичковпрограммы сбора в java для интервьюпрограммы на основе коллекций в javaупражнения программирования Java-коллекции