Arraylist - Установить / добавить метод использования - Java - PullRequest
2 голосов
/ 02 февраля 2012

У меня есть Arraylist целых чисел.Мое требование состоит в том, чтобы определить, существует ли у массива-элемента элемент с указанным индексом. Если ДА, тогда значение должно быть установлено на этот индекс (с использованием метода set), в противном случае значение должно быть добавлено в это местоположение индекса (с использованием add метод)

Мне немного трудно справиться с вышеуказанным условием в моем коде Java. Пожалуйста, помогите.

Вот что у меня есть:

    ArrayList<Integer> tempArray = new ArrayList<Integer>();
        int counter = 0;
        int tempValue = 0;
    For LOOP -
      if (//certain conditions are satisfied){

      tempValue = calculateNewValue();
      tempArray.add(counter, tempValue); //Need some logic here to determine if its a set or add method to be used
    }
if (//some other conditions are satisfied){
       counter++;
}
    end For LOOP

Ответы [ 6 ]

5 голосов
/ 21 февраля 2018

метод set заменяет элемент в указанной позиции новым элементом.Но в add (position, element) добавим элемент в указанную позицию и сместим существующие элементы в правую часть массива.

ArrayList<String> al = new ArrayList<String>();

    al.add("a");
    al.add(1, "b");
    System.out.println(al);

    al.set(0, "c");
    System.out.println(al);

    al.add(0, "d");
    System.out.println(al);

--------------- Вывод -------------------------------------

[a, b]

[c, b]

[d, c, b]

4 голосов
/ 02 февраля 2012

Вам не нужно зацикливаться.ArrayList имеет метод indexOf , который вы можете использовать, чтобы получить первое вхождение объекта.Убедитесь, что правильно реализовали equals.

ArrayList также имеет метод add, который позволяет установить индекс, по которому вставляется элемент. Или заданный метод , это может быть тем, что вы хотите (в зависимости от того, что именно вы пытаетесь сделать)

3 голосов
/ 02 апреля 2017

Другие ответы уже предоставляют информацию об использовании методов indexOf, доступных в списке.Тем не менее, просто добавить некоторую информацию о разнице между «добавить» и «установить» в ArrayList в Java.

Из метода javadocs -

add(index, value) - Вставляет указанный элемент вуказанная позиция в этом списке.Смещает элемент, находящийся в данный момент в этой позиции (если есть), и любые последующие элементы вправо (добавляет один к их индексам).

set(index, value) - Заменяет элемент в указанной позиции в этом списке на указанный элемент.

Таким образом, используя add () вместо set () increases your list size.Вам также следует подумать, нужно ли вам это поведение или нет.

2 голосов
/ 02 февраля 2012

Вот логика, чтобы определить, куда вам нужно вставить или заменить значение в вашем массиве.

if (tempArray.indexOf(tempValue) < 0) {
    tempArray.add(counter, tempValue);
} else {
    tempArray.set(counter, tempValue);
}

P.S. Лучше переименовать counter в index.

2 голосов
/ 02 февраля 2012

То, что вы хотите, это Map, а не List.

Что, если counter намного больше, чем List.size()?Вы добавляете столько элементов, сколько нужно между ними?

0 голосов
/ 03 июня 2014

ArrayList имеет метод contains(Object o) , который «возвращает истину, если список содержит указанный элемент», также вы можете определить, какой метод add() или set() использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...