powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как сравнить int с множеством значений на равенство
10 сообщений из 10, страница 1 из 1
Как сравнить int с множеством значений на равенство
    #39311434
misha1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ли аналог для
int i;
if ((i ==1)||(i ==2)||(i ==3))..., только более кратко?
Наподобие как в sql-е where i in (1,2,3)...
...
Рейтинг: 0 / 0
Как сравнить int с множеством значений на равенство
    #39311435
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
Arrays.asList(new int[]{1, 2, 3}).contains(2)
...
Рейтинг: 0 / 0
Как сравнить int с множеством значений на равенство
    #39311438
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892
Код: java
1.
Arrays.asList(new int[]{1, 2, 3}).contains(2)


Я бы:
1. Вынес константы с которыми сравнивать в static final .... поле класса
2. Вместо Arrays использовал бы HashSet.

private final static HashSet<Integer> validValues = new HashSet<>( Arrays.asList(
1,2,3
));
...
Рейтинг: 0 / 0
Как сравнить int с множеством значений на равенство
    #39311440
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
misha1973,

1. Если у вас всего 3 элемента, то какой смысл?
2. Если вашими троеточиями вы пытались донести что элементов может быть больше, то какой-то синтаксис у вас далекий от математики
Возможно вы имели ввиду это?
misha1973if ((i ==1)||(i ==2)||(i ==3)||...||(i ==N)), только более кратко?
Наподобие как в sql-е where i in (1,2,3, ... , N)

3. Можно использовать HashSet.contains(). Но надо понимать накладные расходы на автобоксинг и поиск.
4. В Google Guava и Commons Lang есть класс Range.
...
Рейтинг: 0 / 0
Как сравнить int с множеством значений на равенство
    #39311443
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
misha1973,

Стильно, модно, мололежно
Код: java
1.
IntStream.range(1, 3).anyMatch(n -> n == i);
...
Рейтинг: 0 / 0
Как сравнить int с множеством значений на равенство
    #39311457
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz3. Можно использовать HashSet.contains(). Но надо понимать накладные расходы на автобоксинг и поиск.

На поиск - HashSet должен быть достаточно быстрым
На автобоксинг - можно взять сторонние коллекции для примитивных типов. Я пользовался http://fastutil.di.unimi.it/

Ну а с накладными расходами сейчас никто не заморачивается (((
...
Рейтинг: 0 / 0
Как сравнить int с множеством значений на равенство
    #39311629
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevBlazkowicz3. Можно использовать HashSet.contains(). Но надо понимать накладные расходы на автобоксинг и поиск.

На поиск - HashSet должен быть достаточно быстрым
На автобоксинг - можно взять сторонние коллекции для примитивных типов. Я пользовался http://fastutil.di.unimi.it/

Ну а с накладными расходами сейчас никто не заморачивается (((

Что значит "никто"? Хочется в 16Гб уложиться
TIntHashSet хорошо экономит место. А чтение его (и вообще всех классов Трове) исходников- увлекательное занятие.
...
Рейтинг: 0 / 0
Как сравнить int с множеством значений на равенство
    #39312290
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
misha1973Есть ли аналог для
int i;
if ((i ==1)||(i ==2)||(i ==3))..., только более кратко?
Наподобие как в sql-е where i in (1,2,3)...
Сам думал об этом. Сахарный оператор in был-бы весьма полезен.

Но для 2-10 вариантов констант лучше всего подошла-бы проверка

Код: java
1.
if (i==1 || i==10 || i==20 .... e.t.c. )...


с точки зрения компиллятора.

Для более толстых массивов (порядка 10-1000) я-бы предложил отсортировать (1 раз
в синглтоне или конструкторе) а потом использовать дихотомический поиск константы.

Код: java
1.
2.
Arrays.sort(...);// in constructor
Arrays.binarySearch(...);// every time in getter...



По поводу стильно-модно-молодежно....

Код: java
1.
IntStream.range(1, 3).anyMatch(n -> n == i);



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

Вобщем и целом я голосую ЗА но... бенчмарк ... бенчмарк и еще раз бенчмарк.
...
Рейтинг: 0 / 0
Как сравнить int с множеством значений на равенство
    #39312293
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. По поводу хеш-таблички не имею ничего против. Просто добавлю что есть вариант
реализации хештейбла поверх массива (эконом-вариант). Правда там есть наихудший случай который надо
также рассмотреть и рассмотреть резервирование одной константы которая будет обозначать NULL внутри
элементов массива.
...
Рейтинг: 0 / 0
Как сравнить int с множеством значений на равенство
    #39312377
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДа. По поводу хеш-таблички не имею ничего против. Просто добавлю что есть вариант
реализации хештейбла поверх массива (эконом-вариант).

Ещё раз- TIntHashSet из трове- как раз хэшсет на основе массива.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как сравнить int с множеством значений на равенство
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]