Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
36
Добавлен:
27.03.2015
Размер:
639.49 Кб
Скачать

java.util.concurrent.atomic Основные методы

атомарных классов (2)

У всех численных( Integer, Long, IntegerArray, LongArray; для *Array все эти методы имеют

дополнительный первый аргумент int i):

*addAndGet(* delta) Атомарно добавляет к текущему значению аргумент delta и

возвращает полученное значение

*decrementAndGet() Атомарно уменьшает на единицу текущее значение и

возвращает результат (аналог префиксной операции – –)

*getAndAdd(* delta) Атомарно добавляет к текущему значению аргумент delta и

возвращает предыдущее значение

*getAndDecrement() Атомарно уменьшает на единицу текущее значение и

возвращает предыдущее значение (аналог постфиксной операции – –)

*getAndIncrement() Атомарно уменьшает на единицу текущее значение и

возвращает предыдущее значение (аналог постфиксной операции + +)

*incrementAndGet() Атомарно увеличивает на единицу текущее значение и

возвращает результат (аналог префиксной операции + +)

java.util.concurrent.atomic Классы с атомарными операциями. Пример.

public final class Counter { private int value = 0;

public synchronized int getValue( ) { return value;

}

public synchronized int increment( ) { return ++value;

}

}

public class NonblockingCounter {

private AtomicInteger value = new AtomicInteger( 0 ); public int getValue( ) {

return value.get( );

}

public int increment( ) { int v;

do {

v = value.get( );

while ( !value.compareAndSet( v, v + 1 ) ); return v + 1;

}

}

Коллекции Java

(Java Collections Framework)

Параллельные коллекции пакета java.util.concurrent базируются на средствах, реализованных ранее в пакете java.util, но отличаются возможностью безопасного применения в многопоточных приложениях при относительно небольших затратах.

Коллекции или контейнеры — это классы позволяющие хранить и производить операции над множеством объектов. Коллекции используются для сохранения, получения, манипулирования данными и обеспечивают агрегацию одних объектов другими.

Во многих языках программирования (java, C, C++, Pascal, …) единственным встроенным в язык средством хранения наборов объектов являются массивы. Однако, массивы обладают значительными недостатками. Одним из них является фиксированный размер массива, порождающий необходимость постоянно следить за значениями индексов. Другим — индексная адресация, что не всегда удобно, т.к. ограничивает возможности добавления и удаления объектов.

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

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

Пакет java.util. Коллекции

Взаимосвязь основных классов и интерфейсов (1)

Пакет java.util. Коллекции

Взаимосвязь основных классов и

интерфейсов (2)

Object

S

Dictionary

Пакет java.util. Коллекции Интерфейсы

Интерфейс Collection

Является корнем всей иерархии классов-коллекций. Он определяет базовую функциональность любой коллекции – набор методов,

которые позволяют добавлять, удалять, выбирать элементы коллекции. Классы, которые реализуют интерфейс Collection, могут

содержать дубликаты и пустые (null) значения.

Класс AbstractCollection, как абстрактный класс, служит основой

для создания конкретных классов коллекций и содержит реализацию некоторых методов, определенных в интерфейсе Collection. При

наследовании от этого класса все реализованные методы можно заместить.

Пакет java.util. Коллекции Методы интерфейса Collection (1)

boolean

add( E e )

Если коллекция изменилась в результате

 

 

вызова этого метода, то возвращается true,

 

 

иначе (например, если это Set и добавляемый

 

 

элемент уже в нем содержится) возвращается

 

 

false.

boolean

addAll( Collection<? extends E> c ) Если коллекция изменилась в результате

 

 

вызова этого метода, то возвращается true,

 

 

иначе возвращается false.

void

clear( )

Удаляются все элементы из коллекции.

boolean

contains( Object o )

Если коллекция содержит указанный

 

 

элемент, то возвращается true, иначе – false.

boolean

containsAll( Collection<?> c )

Если коллекция содержит все элементы из

 

 

коллекции, заданной аргументом, то

 

 

возвращается true, иначе – false.

boolean

isEmpty( )

Если коллекция пуста (не содержит ни

 

 

одного элемента, то возвращается true, иначе

 

 

false.

Пакет java.util. Коллекции Методы интерфейса Collection (2)

Iterator

iterator( )

Возвращается объект, реализующий интерфейс

<E>

 

java.util.Iterator.

boolean

remove( Object o )

Удаляется одно (или ни одного) вхождение

 

 

указанного элемента из коллекции. Если коллекция

 

 

изменилась, то возвращается true, иначе

 

 

возвращается false.

boolean

removeAll( Collection<?> c)

Удаляются все вхождения элементов заданной

 

 

коллекции. Если коллекция изменилась, то

 

 

возвращается true, иначе возвращается false.

boolean

retainAll( Collection<?> c )

Удаляются все элементы, не входящие в указанную

 

 

коллекцию. Если коллекция изменилась, то

 

 

возвращается true, иначе – false.

int

size( )

Возвращается количество элементов.

Object[ ]

toArray( )

Возвращается массив, содержащий все элементы

 

 

коллекции.

<T> T[ ]

toArray( T[ ] a )

Возвращается массив, содержащий все элементы

 

 

коллекции (либо a, либо создается новый, если длина

 

 

указанного массива меньше количества элементов).

Пакет java.util. Коллекции Интерфейсы *Set

Интерфейс Set

Классы, которые реализуют этот интерфейс, не допускают наличия дубликатов в составе коллекции. В коллекции этого типа разрешено

наличие только одной ссылки типа null. Интерфейс Set расширяет интерфейс Collection (не добавляя методов), таким образом, любой

класс, реализующий интерфейс Set, имеет все методы, определенные в Collection. Любой объект, добавляемый в Set, должен реализовать

метод equals, чтобы его можно было сравнить с другими элементами.

AbstractSet, являясь абстрактным классом, представляет собой

основу для реализации различных вариантов интерфейса Set. Интерфейс SortedSet

Этот интерфейс расширяет Set, требуя, чтобы содержимое набора

было упорядочено. Такие коллекции могут содержать объекты, которые реализуют интерфейс Comparable, либо могут сравниваться с использованием внешнего Comparator.

Интерфейс NavigableSet - расширение SortedSet с приблизительным доступом к элементу. Например, метод higher( ) позволяет получить наименьшей элемент в множестве, который больше указанного.

Пакет java.util. Коллекции Интерфейсы List и ListIterator

Интерфейс List

Классы, реализующие этот интерфейс, содержат упорядоченную последовательность объектов (объекты хранятся в том порядке, в

котором они были добавлены). Интерфейс List расширяет интерфейс Collection, и любой класс, реализующий List, имеет все методы, определенные в Collection. В то же время определены новые методы,

которые позволяют добавлять и удалять элементы из списка.

Интерфейс-маркер RandomAccess предназначен для указания, что класс, реализующий список, предоставляет достаточно быстрые методы произвольного доступа к элементам коллекции.

Абстрактный класс AbstractList представляет собой основу для реализации различных вариантов интерфейса List на основе массивов и, соответственно, произвольном доступе.

Класс AbstractSequentialList предоставляет базовую реализацию интерфейса List, обеспечивая только последовательную обработку связанного списка элементов.

Соседние файлы в папке Презентации по Java