По сути, мой приятель говорил, что я мог бы сделать свой код короче, используя другой способ проверки, содержит ли массив int int, хотя он не сказал мне, что это такое: P.
Текущий:
public boolean contains(final int[] array, final int key) {
for (final int i : array) {
if (i == key) {
return true;
}
}
return false;
}
Также пробовали это, хотя по какой-то причине он всегда возвращает false.
public boolean contains(final int[] array, final int key) {
return Arrays.asList(array).contains(key);
}
Может ли кто-нибудь мне помочь?
Спасибо.
Hashset
ответ механизма повторной проверки на основе проверки . Это самый быстрый способ.ArrayList
реализация делает то же самое.Ответы:
Вот решение Java 8
источник
Вы можете просто использовать
ArrayUtils.contains
fromApache Commons Lang library
.источник
ArrayUtils.contains()
это частьApache Commons Lang
библиотеки. Несмотря на то, что это отличная библиотека, вероятно, все еще не рекомендуется добавлять внешнюю зависимость, чтобы проверить, содержит ли массив элемент: DЭто потому что
Arrays.asList(array)
возвращениеList<int[]>
.array
Аргумент рассматривается как одно значение, которое вы хотите обернуть (вы получаете список массивов целых чисел), а не как vararg.Обратите внимание , что это делает работу с типами объектов (не примитивы):
или даже:
Но нельзя,
List<int>
и автобокс здесь не работает.источник
Guava предлагает дополнительные методы для примитивных типов. Среди них есть метод, который принимает те же аргументы, что и ваш.
Вы также можете статически импортировать версию гуавы.
См. Объяснение примитивов гуавы
источник
Другой способ:
Это изменяет переданный массив. У вас будет возможность скопировать массив и работать с исходным массивом, т.е.
int[] sorted = array.clone();
это всего лишь пример короткого кода. Время выполнения
O(NlogN)
пока ваш путьO(N)
источник
contains
нибудь метод изменил мой массив.-1
если это действительно так. "Точка вставки определяется как точка, в которой ключ будет вставлен в список: индекс первого элемента больше, чем ключ, или list.size (), если все элементы в списке меньше указанного ключа. ". Надо сказать>= 0
.Я знаю, что уже очень поздно, но попробуй
Integer[]
вместо этогоint[]
.источник
1. одноразовое использование
2. используйте HashSet для оценки производительности, если вы используете более одного раза.
источник
Попробуй это:
источник
Вы можете преобразовать свой примитивный массив int в массив целых чисел, используя приведенный ниже код Java 8,
А затем используйте
contains()
метод, чтобы проверить, содержит ли список определенный элемент,источник
это работало в java 8
источник
Вы можете использовать
java.util.Arrays
класс для преобразования массиваT[?]
вList<T>
объект с помощью таких методов, какcontains
:источник
В зависимости от того, насколько большим будет ваш массив int, вы получите гораздо лучшую производительность, если будете использовать коллекции,
.contains
а не выполнять итерацию по массиву по одному элементу за раз:источник
Решение # 1
Поскольку исходный вопрос требует только упрощенного решения (а не более быстрого), вот однострочное решение:
Объяснение: В документации Javadoc
Arrays.toString()
указано, что результат заключен в квадратные скобки, а соседние элементы разделены символами «,» (запятая, за которой следует пробел). Так что мы можем на это рассчитывать. Сначала мы конвертируемarray
в строку, а затем проверяем,key
содержится ли в этой строке. Конечно, мы не можем принимать «субчисла» (например, «1234» содержит «23»), поэтому мы должны искать шаблоны, в которых передkey
символом стоит открывающая скобка или пробел, а за ним следует закрывающая скобка или запятая.Примечание . Используемый шаблон регулярного выражения также правильно обрабатывает отрицательные числа (строковое представление которых начинается со знака минус).
Решение # 2
Это решение уже опубликовано, но содержит ошибки, поэтому я публикую правильное решение:
Также у этого решения есть побочный эффект: оно изменяет
array
(сортирует).источник
Попробуйте
Integer.parseInt()
сделать это .....источник