Я думаю, что это'ы довольно простой вопрос, но я могу'т выяснить, как сделать это правильно.
Я've получили пустой ArrayList:
ArrayList<object> list = new ArrayList<object>();
Я'ве получил некоторые объекты я хочу добавить и каждый объект должен быть в определенном положении. Однако необходимо, чтобы они могут быть добавлены в каждый возможный порядок. Когда я попробовать это, это не't работа, и я получаю ошибка IndexOutOfBoundsException
:
list.add(1, object1)
list.add(3, object3)
list.add(2, object2)
То, что я пробовала-это наполнение коллекции
с нуля
, и тогда делать выше. Это работает, но я думаю, это'ы ужасное решение. Есть ли другой способ сделать это?
Вы можете сделать это такой:
list.add(1, object1)
list.add(2, object3)
list.add(2, object2)
После добавления объект2 в положение 2, он будет двигаться object3 в положение 3.
Если вы хотите object3, чтобы быть в позиции3 все время я'd предлагает вам использовать HashMap с позиции как ключевой и объект в качестве значения.
Вы можете использовать массив объектов и преобразовать его в коллекцию ArrayList-
Object[] array= new Object[10];
array[0]="1";
array[3]= "3";
array[2]="2";
array[7]="7";
List<Object> list= Arrays.asList(array);
Класса ArrayList будет- [1, нуль, 2, 3, нуль, нуль, нуль, 7, нуль, нуль]
Если это'ы так, то почему бы'т вы попробуйте использовать обычный массив, инициализировать емкость и поставить объекты на индекс, которые вы хотите.
Object[] list = new Object[10];
list[0] = object1;
list[2] = object3;
list[1] = object2;
Вы также можете переопределить ArrayList для вставки значения null между ваш размер и элемент, который вы хотите добавить.
import java.util.ArrayList;
public class ArrayListAnySize<E> extends ArrayList<E>{
@Override
public void add(int index, E element){
if(index >= 0 && index <= size()){
super.add(index, element);
return;
}
int insertNulls = index - size();
for(int i = 0; i < insertNulls; i++){
super.add(null);
}
super.add(element);
}
}
Затем можно добавить в любой момент в коллекцию ArrayList. Например, это основной метод:
public static void main(String[] args){
ArrayListAnySize<String> a = new ArrayListAnySize<>();
a.add("zero");
a.add("one");
a.add("two");
a.add(5,"five");
for(int i = 0; i < a.size(); i++){
System.out.println(i+": "+a.get(i));
}
}
дает такой результат из консоли:
0: ноль
1: один
2: два
3: нуль
4: нуль
5: пять
Обращаю ваше внимание на [класса ArrayList.добавить документацию][1], который говорит, что он выдает
Ошибка IndexOutOfBoundsException - если индекс испытывает недостаток диапазона (индекс < 0 || индекс > размер()`)
Проверяем размер()из вашего списка перед вызовом списка.добавить(1, объект1)
[1]: http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html#add%28int,%20е 29%
Вам нужно заполнить пустые индексы с нулями.
while (arraylist.size() < position)
{
arraylist.add(null);
}
arraylist.add(position, object);
Как насчет этой маленькой а
петля в качестве решения?
private ArrayList<Object> list = new ArrayList<Object>();
private void addObject(int i, Object object) {
while(list.size() < i) {
list.add(list.size(), null);
}
list.add(i, object);
}
....
addObject(1, object1)
addObject(3, object3)
addObject(2, object2)
@Maethortje
The problem here is java creates an empty list when you called new ArrayList and
при попытке добавить элемент в указанную позицию ВАС есть IndexOutOfBound , поэтому список должен иметь некоторые элементы на своей позиции.
Пожалуйста, попробуйте следующее
/*
Add an element to specified index of Java ArrayList Example
This Java Example shows how to add an element at specified index of java
ArrayList object using add method.
*/
import java.util.ArrayList;
public class AddElementToSpecifiedIndexArrayListExample {
public static void main(String[] args) {
//create an ArrayList object
ArrayList arrayList = new ArrayList();
//Add elements to Arraylist
arrayList.add("1");
arrayList.add("2");
arrayList.add("3");
/*
To add an element at the specified index of ArrayList use
void add(int index, Object obj) method.
This method inserts the specified element at the specified index in the
ArrayList.
*/
arrayList.add(1,"INSERTED ELEMENT");
/*
Please note that add method DOES NOT overwrites the element previously
at the specified index in the list. It shifts the elements to right side
and increasing the list size by 1.
*/
System.out.println("ArrayList contains...");
//display elements of ArrayList
for(int index=0; index < arrayList.size(); index++)
System.out.println(arrayList.get(index));
}
}
/*
Output would be
ArrayList contains...
1
INSERTED ELEMENT
2
3
*/
Это возможное решение:
list.add(list.size(), new Object());
Я думаю, что решения от medopal является то, что вы ищете.
Но только другим альтернативным решением является использование Хеш - <целое число, Объект> и используйте ключ (целое число), чтобы сохранить позиции.
Таким образом, вы выиграли'т нужна, чтобы заполнить его сначала с нулями и т. д., просто придерживайтесь позиции и объекта на карте, как вы идете вперед. Вы можете написать пару строк в конце, чтобы преобразовать его в список, если вам это нужно таким образом.
Предположим, вы хотите добавить товар в состоянии, то размер списка должен быть больше, чем позиция.
добавить(2, п.)`: этот синтаксис означает, переместите старый элемент в позиции 2 к следующему индексу и добавить элемент на 2-ой позиции.
Если нет пункта на 2-й позиции, то это не будет работать, это'буду бросать исключение.
Это означает, что если вы хотите добавить что-то в положении 2`
ваш размер списка должен быть по крайней мере(2 + 1) =3,
поэтому элементы доступны в положении 0,1,2`.
таким образом гарантируется, что положение 2 благополучно добраться и не было бы никаких исключений.
Если вы используете аромат для Android на Java, может я предлагаю использовать SparseArray. Это's более памяти эффективного отображения чисел объектам и легче перебрать, чем карта
Немного поздно, но надеюсь, все еще может быть полезным кому-то.
2 шага для добавления элементов в определенную позицию в коллекции
коллекции
список = новый ArrayList();//инициализировать ArrayList с для (целое число i = 0; Я &л; mItems.размер(); я++) { список.добавить(Я, значение null); //на"Добавить" все позиции в null } / / на "набор" по пунктам список.набор(должность, SomeObject);
Таким образом, вы Дон'т иметь избыточные элементы в коллекции
, т. е. если вы были, чтобы добавить элементы, такие как,
list = new ArrayList(mItems.size());
list.add(position, SomeObject);
Это **** не перезаписывать существующие элементы в положении просто, перенося существующие вправо на одну - так у вас объект ArrayList с вдвое большим числом индексов.