Как получить индекс элемента в arraylist java
Перейти к содержимому

Как получить индекс элемента в arraylist java

  • автор:

ArrayList как узнать индекс элемента если известно значение?

Есть у ArrayList метод indexOf — он как раз ищет подходящий элемент и выводит его индекс.

ArrayList test = new ArrayList<>(); test.add("yo"); test.add("yo2"); System.out.println(test.indexOf("yo2")); // Выведет: 1 

Если в списке несколько одинаковых значений, то выведет индекс первого попавшегося.

Отслеживать
353 1 1 золотой знак 2 2 серебряных знака 12 12 бронзовых знаков
ответ дан 16 сен 2016 в 21:53
Алексей Шиманский Алексей Шиманский
71.1k 12 12 золотых знаков 90 90 серебряных знаков 180 180 бронзовых знаков
Стоит добавить, что может понадобиться переопределение методов equals() и hashCode() объектов
16 сен 2016 в 22:19
@ЮрийСПб вы правы, но на половину. hashCode() не используется
17 сен 2016 в 5:41
Спасибо! все правильно. Но все равно, то что хотел сделать так и не получилось(
17 сен 2016 в 6:24

Смотря что Вы хотите сделать под формулировкой макс.
Если это последний индекс нужного элемента то lastIndexOf(value) .
Можно через цикл, и там через условие то что Вам надо. напишите подробнее если это не подходит.

 ArrayList test = new ArrayList<>(); test.add("yo"); test.add("yo2"); test.add("yo3"); test.add("yo2"); System.out.println(test.indexOf("yo2")); System.out.println(test.lastIndexOf("yo2")); 

Отслеживать
ответ дан 17 сен 2016 в 9:50
516 3 3 серебряных знака 19 19 бронзовых знаков
Спасибо! Уже разобрался
17 сен 2016 в 9:55

  • java
  • android
  • arraylist
  • index
    Важное на Мете
Связанные
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Найти индекс элемента в списке в Java

В этом посте будет обсуждаться, как найти индекс элемента в списке в Java.

1. Использование indexOf() метод

Стандартное решение для поиска индекса элемента в списке использует метод indexOf() метод. Он возвращает индекс первого появления указанного элемента в списке или -1, если элемент не найден.

import java . util . List ;
class Main
public static void main ( String [ ] args )
List values = List . of ( 5 , 3 , 4 , 7 , 6 , 2 , 9 , 6 ) ;
int item = 6 ;
int index = values . indexOf ( item ) ;
System . out . println ( index ) ; // 4

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

С помощью Stream API вы можете сделать что-то вроде следующего. Решение генерирует IntStream индексов и фильтровать индексы, содержащие данный элемент, и возвращать индекс первого вхождения или -1, если соответствующий элемент не найден.

import java . util . List ;
import java . util . Objects ;
import java . util . stream . IntStream ;
class Main
public static void main ( String [ ] args )
List values = List . of ( 5 , 3 , 4 , 7 , 6 , 2 , 9 , 6 ) ;
int item = 6 ;
int index = IntStream . range ( 0 , values . size ( ) )
. filter ( i -> Objects . equals ( values . get ( i ) , item ) )
. orElse ( — 1 ) ;
System . out . println ( index ) ; // 4

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

Вот эквивалентная версия без использования Stream API.

import java . util . List ;
import java . util . Objects ;
class Main
public static void main ( String [ ] args )
List values = List . of ( 5 , 3 , 4 , 7 , 6 , 2 , 9 , 6 ) ;
int item = 6 ;
int index = — 1 ;
for ( int i = 0 ; i < values . size ( ) ; i ++ ) < if ( Objects . equals ( values . get ( i ) , item ) ) < System . out . println ( index ) ; // 4

Это все, что касается поиска индекса элемента в списке в Java.

Оценить этот пост

Средний рейтинг 4.62 /5. Подсчет голосов: 21

Голосов пока нет! Будьте первым, кто оценит этот пост.

Сожалеем, что этот пост не оказался для вас полезным!

Расскажите, как мы можем улучшить этот пост?

Спасибо за чтение.

Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.

Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂

Подписывайся
0 Комментарии
Встроенные отзывы
Просмотреть все комментарии
Загрузить больше комментариев
Просматривать
Подпишитесь на новые публикации

  • Все проблемы
  • Практика DSA
  • 100 самых популярных задач
  • 50 лучших классических задач
  • Лучшие алгоритмы
  • Компилятор С/С++
  • Компилятор Java
  • Компилятор Python
  • Компилятор JavaScript
  • компилятор PHP
  • Компилятор C#
  • Свяжитесь с нами
  • Политика конфиденциальности
  • условия обслуживания
  • Подпишитесь на новые публикации

Techie Delight © 2023 Все права защищены.

Этот веб-сайт использует файлы cookie. Используя этот сайт, вы соглашаетесь с использованием файлов cookie, нашей политикой, условиями авторского права и другими условиями. Читайте наши Политика конфиденциальности. Понятно

ArrayList

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

Освойте профессию «Java-разработчик»

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

Что такое ArrayList

ArrayList — это в первую очередь упорядоченный набор данных: слово «упорядоченный» означает, что у каждого элемента в наборе есть свое месторасположение. Оно описывается индексом — числом, хранящим положение элемента. Индексы начинаются с нуля. Первый элемент в массиве будет иметь индекс 0, второй — 1, и так далее.

Идея ArrayList — расширяемость. Когда разработчик увеличивает количество элементов, длина массива автоматически увеличивается, чтобы уместить их все. Когда какой-то элемент удаляют, длина уменьшается — так структура становится понятнее, без пустых участков. Можно также создать ArrayList с заданной изначальной емкостью, но она автоматически расширится, если элементов станет больше. Кроме того, в ArrayList можно делать много операций, которые неприменимы к обычному массиву. Например, удалять элементы в простом массиве нельзя — только обнулять или перезаписывать. В остальном структура похожа на обычный массив. И вот почему.

Профессия / 14 месяцев
Java-разработчик

Освойте востребованный язык

Group 1321314345 (4)

Для чего нужен ArrayList

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

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

Как устроен ArrayList

Внутри структуры данных — массив фиксированного размера, который удаляется и создается заново с новой длиной, когда внутри ArrayList меняется количество объектов. Технически это выглядит так:

  • разработчик отдает команду записать новый элемент;
  • внутри ArrayList создается копия текущего массива, который там хранится, но с большей длиной;
  • в нужное место расширенной копии добавляется новый элемент;
  • старый массив удаляется.

Чтобы оптимизировать этот процесс, новая длина по умолчанию в полтора раза больше старой — так массив не приходится «переписывать» слишком часто.

Станьте Java-разработчиком
и создавайте сложные сервисы
на востребованном языке

Особенности ArrayList

В интерфейсе List описано множество методов, с помощью которых можно легко управлять динамическим массивом: добавлять элементы в конец или в начало, вставлять их в любое место структуры, быстро получать данные, видоизменять весь массив разом, «сливать» несколько коллекций друг с другом и делать многое другое. Для этого не нужно создавать сложные алгоритмы или добавлять вспомогательные структуры — достаточно написать одну строчку кода.

Еще одна особенность ArrayList — технически он хранит только ссылочные типы. Это значит, что фактически внутри него лежат ссылки на сложные элементы. Но внутри такого массива можно хранить и «простые», примитивные элементы вроде числа или строки — для них автоматически создастся специальная «обертка». Так что фактически массив можно использовать для хранения любых типов данных.

Как работать с ArrayList

При создании ArrayList можно сделать пустым с помощью команды

ArrayList имя переменной = new ArrayList();

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

Еще можно задать массиву изначальную емкость — capacity. Так делают, когда разработчик заранее знает, какое минимальное количество элементов в массиве ему понадобится. Это позволяет уменьшить количество «перезаписей» массива. Для задания емкости нужно указать в скобках целое число — начальное количество элементов.

Затем можно начинать работать с динамическим массивом: добавлять данные командой .add(element), изменять с помощью .set(index, element), применять к элементам различные функции. Их очень много, и с их списком можно ознакомиться в любом туториале или в документации.

Вы можете подробнее узнать про язык Java и про структуры данных в нем из нашего профессионального курса. Станьте востребованным специалистом с нами.

Java-разработчик

Java уже 20 лет в мировом топе языков программирования. На нем создают сложные финансовые сервисы, стриминги и маркетплейсы. Освойте технологии, которые нужны для backend-разработки, за 14 месяцев.

картинка (67)

Статьи по теме:

Как получить списки индексов одинаковых элементов массива?

Всех приветствую. Имеем массив произвольной длинны n. Помогите пожалуйста с алгоритмом,который добавляет в новый список индексы одинаковых элементов этого массива,а если таких нет,значит туда добавится один индекс. К примеру у нас есть строковый массив <"Маша","Саша""Люба","Таня","Таня","Женя","Люба","Кирилл">. В этом случае у нас должен получиться ArayList,который содержит 6 ArayList. В первом ArayList должно быть 0,Во втором — 1,В третьем — (2,6) (Поскольку в этих индексах находится одинаковый элемент «Люба»),В четвёртом — (3,4),В пятом — 5,А в шестом — 7. Помогите пожалуйста с самым оптимальным алгоритмом,который решает эту задачу. По сути это что-то типа группировки. Заранее благодарю всех за помощь.

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Массив: Получить сумму тех элементов двумерного массива A(N,N), для которых сумма их индексов нечетна
составить программу суммирующую те элементы двумерного массива A(N,N)для которых сумма их индексов.

Поиск и вывод значения одинаковых элементов матрицы, их индексов
Собственно, было задание С формированием двумерного массива по правилу все просто, а вот с.

Определить величину Y, как наибольший из индексов элементов массива
Определить величину Y, как наибольший из индексов элементов массива X(5х5), равных 1.выполнить это.

Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

18968 / 9663 / 2710
Регистрация: 21.10.2017
Сообщений: 21,473

Лучший ответ

Сообщение было отмечено КАВ как решение

Решение

КАВ, можно так, раз уж аррэйлист аррэйлистов

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
import java.util.ArrayList; public class Cyber { public static void main(String[] args) { String[] s = {"Маша", "Саша", "Люба", "Таня", "Таня", "Женя", "Люба", "Кирилл"}; ArrayListArrayListInteger>> arr = new ArrayList<>(); for (int i = 0; i  s.length; i++) { ArrayListInteger> temp = new ArrayList<>(); temp.add(i); for (int j = i + 1; j  s.length; j++) { if (s[i].equals(s[j])) temp.add(j); } arr.add(temp); } arr.forEach(System.out::println); } }

Регистрация: 16.04.2016
Сообщений: 278

Огромное Вам спасибо за идею. Я конечно не изучал глубоко Ваш алгоритм,но просмотрев его мне показалось,что размер списка со списками в arraylist всегда равен длине массива,но,если это так,это не всегда верно. К примеру если все элементы в массиве одинаковые,то в общем array list будет только 1 arrayList,если в массиве есть только 2 группы элементов,т.е к примеру ‘Маша’,’Саша’,то в общем списке будет 2 списка. Если же все элементы массива разные,то тогда как раз в общем списке должно быть n списков с одним индексом каждый,где n — длина массива. В противном случае алгоритм будет работать не корректно. Извините пожалуйста,если я не прав,просто я бегло просмотрел Ваш алгоритм и возможно чего-то не понял.

Эксперт функциональных языков программированияЭксперт Java

4467 / 2701 / 484
Регистрация: 28.04.2012
Сообщений: 8,558

ЦитатаСообщение от КАВ Посмотреть сообщение

если я не прав
Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

18968 / 9663 / 2710
Регистрация: 21.10.2017
Сообщений: 21,473

КАВ, все правильно понял, молодец. А на счет списка списков — ты так указал в ТЗ, разве нет?

Добавлено через 1 час 7 минут
Да, нестыковка имеет место. Сори

Регистрация: 16.04.2016
Сообщений: 278

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

Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

18968 / 9663 / 2710
Регистрация: 21.10.2017
Сообщений: 21,473
КАВ, можно поставить доп. условие, например на пустой элемент и при совпадении дубликат обнулять.
Регистрация: 29.09.2010
Сообщений: 60

Можно как-то так, за один проход, но с дополнительным списком-словарем.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
public static void main(String[] args) { String[] s = {"Маша", "Саша", "Люба", "Таня", "Таня", "Женя", "Люба", "Кирилл"}; ArrayListArrayListInteger>> arr = new ArrayList<>(); ArrayListString> Str=new ArrayList<>(); Str.add(s[0]); arr.add(new ArrayList<>()); arr.get(0).add(0); for (int i = 1; i  s.length; i++) { int n=Str.indexOf(s[i]); if(n!=-1)arr.get(n).add(i); else { ArrayListInteger> tmp=new ArrayList<>(); tmp.add(i); arr.add(tmp); Str.add(s[i]); } } arr.forEach(System.out::println); }

386 / 74 / 31
Регистрация: 13.04.2012
Сообщений: 127

1 2 3 4 5 6 7 8 9 10
public static void main(String[] args) { String[] s = {"Маша", "Саша", "Люба", "Таня", "Таня", "Женя", "Люба", "Кирилл"}; MapString, ArrayListInteger>> wordsMap = new LinkedHashMap<>(); for (int i = 0; i  s.length; i++) { ArrayListInteger> curList = wordsMap.getOrDefault(s[i], new ArrayListInteger>()); curList.add(i); wordsMap.put(s[i], curList); } wordsMap.values().forEach(System.out::println); }

Регистрация: 11.09.2015
Сообщений: 24

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
import java.util.ArrayList; public class Main { public static void main(String[] args){ String[] s = {"Маша", "Саша", "Люба", "Кирилл", "Таня", "Таня", "Женя", "Люба", "Кирилл", "Кирилл", "Маша", "Маша"}; ArrayListArrayListInteger>> list = new ArrayList<>(); int [] used = new int[s.length]; for (int i = 0; i  s.length - 1; i++){ ArrayListInteger> temp = new ArrayList<>(); boolean flag = false; if (used[i] == 1) continue; for (int j = i + 1; j  s.length; j++){ if (s[i].equals(s[j]) == true && flag == false){ temp.add(i); temp.add(j); used[j] = 1; flag = true; } else if (s[i].equals(s[j]) == true && flag == true){ temp.add(j); used[j] = 1; } } if (flag == true) list.add(temp); } list.forEach(System.out::println); } }

Добавлено через 14 минут

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
import java.util.ArrayList; public class Main { public static void main(String[] args){ String[] s = {"Маша", "Саша", "Люба", "Таня", "Таня", "Женя", "Люба", "Кирилл"}; ArrayListArrayListInteger>> list = new ArrayList<>(); int [] used = new int[s.length]; for (int i = 0; i  s.length; i++){ ArrayListInteger> temp = new ArrayList<>(); if (used[i] == 1) continue; for (int j = i; j  s.length; j++){ if (s[i].equals(s[j]) == true){ temp.add(j); used[j] = 1; } } list.add(temp); } list.forEach(System.out::println); } }

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *