Рубрики
Без рубрики

Список примитивных целочисленных значений в Java

Узнайте, как создать список примитивных целых чисел с помощью основных Java и внешних библиотек

Автор оригинала: baeldung.

1. Обзор

В этом уроке мы узнаем, как построить список, содержащий примитивные целочисленные значения .

Мы рассмотрим решения, использующие основную Java и внешние библиотеки.

2. Автобоксинг

В Java аргументы generic type должны быть ссылочными типами. Это означает, что мы не можем сделать что-то вроде List .

Вместо этого мы можем использовать List и воспользоваться преимуществами автобокса. Autoboxing помогает нам использовать интерфейс List , как если бы он содержал примитивные int значения. Под капотом по-прежнему находится коллекция Объектов , а не примитивов.

Основное решение Java – это просто настройка, позволяющая использовать примитивы с общими коллекциями . Кроме того, это связано с затратами на конвертацию в бокс и распаковку.

Однако в Java есть и другие опции и дополнительные сторонние библиотеки, которые мы можем использовать. Давайте посмотрим, как их использовать ниже.

3. Использование API потока

Часто на самом деле нам не нужно создавать список , нам просто нужно работать с ним.

В этих случаях может сработать использование Java 8 Stream API вместо создания списка в целом. Класс In stream предоставляет последовательность примитивных int элементов, которая поддерживает последовательные агрегатные операции.

Давайте быстро рассмотрим пример:

IntStream stream = IntStream.of(5, 10, 0, 2, -8);

Метод IntStream.of () |/static возвращает последовательный IntStream .

Аналогично, мы можем создать IntStream из существующего массива ints :

int[] primitives = {5, 10, 0, 2, -8};
IntStream stream = IntStream.of(primitives);

Кроме того, мы можем применить стандартные операции API потока для итерации, фильтрации и агрегирования ints . Например, мы можем вычислить среднее значение положительных значений int :

OptionalDouble average = stream.filter(i -> i > 0).average();

Самое главное, автобокс не используется при работе с потоками.

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

4. Использование сокровищницы

Trove-это высокопроизводительная библиотека, которая предоставляет примитивные коллекции для Java .

Чтобы настроить Trove с Maven, нам нужно включить | trov4j зависимость в ваш pom.xml :


    net.sf.trove4j
    trove4j
    3.0.2

С помощью Trove мы можем создавать списки, карты и наборы.

Например, существует интерфейс Titleist с его TIntArrayList реализация для работы со списком значений int :

TIntList tList = new TIntArrayList();

Несмотря на то, что Titleist не может напрямую реализовать List , его методы очень сопоставимы. Другие решения, которые мы обсуждаем, следуют аналогичной схеме.

Наибольшая выгода от использования TIntArrayList – это прирост производительности и потребления памяти . Никакой дополнительной упаковки/распаковки не требуется, так как он хранит данные внутри массива int [] .

5. Использование Fastutil

Еще одной высокопроизводительной библиотекой для работы с примитивами является Fastutil . Давайте добавим fastutil зависимость :


    it.unimi.dsi
    fastutil
    8.1.0

Теперь мы готовы использовать его:

IntArrayList list = new IntArrayList();

Конструктор по умолчанию IntArrayList() внутренне создает массив примитивов с емкостью по умолчанию 16 . В том же духе мы можем инициализировать его из существующего массива:

int[] primitives = new int[] {5, 10, 0, 2, -8};
IntArrayList list = new IntArrayList(primitives);

6. Использование кольта

Colt является открытым исходным кодом, высокопроизводительной библиотекой для научных и технических вычислений . Пакет cern.colt содержит изменяемые по размеру списки, содержащие примитивные типы данных, такие как int .

Во-первых, давайте добавим colt зависимость :


    colt
    colt
    1.2.0

Примитивный список, предлагающий эту библиотеку, называется cern.colt.list.ИнтАррайЛист:

cern.colt.list.IntArrayList coltList = new cern.colt.list.IntArrayList();

Начальная емкость по умолчанию-десять.

7. Использование гуавы

Guava предоставляет ряд способов взаимодействия между примитивными массивами и API-интерфейсами коллекций . Пакет com.google.common.primitives содержит все классы для размещения примитивных типов.

Например, класс Immutable Int Array позволяет нам создать неизменяемый список элементов int .

Предположим, у нас есть следующий массив значений int :

int[] primitives = new int[] {5, 10, 0, 2};

Мы можем просто создать список с массивом:

ImmutableIntArray list = ImmutableIntArray.builder().addAll(primitives).build();

Кроме того, он предоставляет API-интерфейс списка со всеми стандартными методами, которые мы ожидаем.

8. Заключение

В этой краткой статье мы показали несколько способов создания списков с примитивными целыми числами . В наших примерах мы использовали библиотеки Trove, Fastutil, Colt и Guava .

Как обычно, полный код этой статьи доступен на GitHub .