Коллекции Java: введение


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

Например, если ваше приложение сохраняет данные в объект типа People, вы можете хранить несколько People объектов в коллекции.

Типичные коллекции: стеки, очереди, списки и деревья.

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

Класс или интерфейс, объявление которого имеет один или несколько параметров типа, является универсальным классом или интерфейсом. Например, List определяет один параметр типа List<E>.

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

Библиотека коллекции поддерживает лямбда-выражения. Операции над коллекциями в значительной степени упрощают работу с ними.

В следующем коде показан пример создания коллекции типа List, которая параметризуется чтобы указать компилятору Java, что только String разрешены в этом списке. Используется ссылка на метод и foreach цикл от Java 8.

import java.util.*;
public class MyArrayList {
    public static void main(String[] args) {
        // Создаем list 
        List<String> list = Arrays.asList("Yuriy", "Tanya");
        // Или вот так
        List<String> anotherList = new ArrayList<>();
        anotherList.add("Yuriy");
        anotherList.add("Tanya");
        // выводим каждый элемент на консоль с помощью ссылок на методы
        list.forEach(System.out::println);
        anotherList.forEach(System.out::println);
    }
}
Если вы попытаетесь поместить объект в этот список, который не является String, то получится ошибка компиляции.

/MyArrayList.java:5: error: incompatible types: inference variable T has incompatible bounds
        List<String> list = Arrays.asList("Yuriy", 3);
                                         ^
    equality constraints: String
    lower bounds: Integer,String
  where T is a type-variable:
    T extends Object declared in method <T>asList(T...)
1 error
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, java, коллекции




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Работа с архивами в C++: часть первая
Совпадение стилей, или решение проблемы с OpenCart
Пример создания игры на флеш: часть 1