지정된 인덱스의 ArrayList에 개체 추가
꽤 간단한 질문인 것 같은데 어떻게 해야 할지 모르겠어요.
빈 배열 목록이 있습니다.
ArrayList<object> list = new ArrayList<object>();
추가할 개체가 몇 개 있는데 각 개체가 특정 위치에 있어야 합니다.단, 각각의 가능한 순서로 추가할 필요가 있습니다.이거 하면 안 되고 이거 하면...IndexOutOfBoundsException
:
list.add(1, object1)
list.add(3, object3)
list.add(2, object2)
내가 시도했던 것은 이 모든 것을 채우는 것이다.ArrayList
와 함께null
그리고 위에 있는 것을 합니다.효과는 있지만 끔찍한 해결책이라고 생각해요.다른 방법이 있나요?
다음과 같이 할 수 있습니다.
list.add(1, object1)
list.add(2, object3)
list.add(2, object2)
object2를 위치2에 추가하면 object3가 위치3으로 이동합니다.
object3를 항상 position3에 배치하고 싶다면 position을 key로 하고 오브젝트를 value로 하는 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);
Array List는 [1, null, 2, 3, null, null, null, 7, null, null]가 됩니다.
그렇다면 일반 어레이를 사용하여 용량을 초기화하고 개체를 원하는 인덱스에 배치하는 것을 고려해 보십시오.
Object[] list = new Object[10];
list[0] = object1;
list[2] = object3;
list[1] = object2;
또한 ArrayList를 덮어쓰고 크기와 추가할 요소 사이에 늘을 삽입할 수도 있습니다.
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: 0
1:1
2:2
3: 특수한 순서
4: 특수한 순서
5:5
그 서류에 주의를 끌겠습니다. 그 서류에는IndexOutOfBoundsException
- 지수가 범위를 벗어난 경우(index < 0 || index > size()
)
체크하다size()
전화하기 전에 리스트의list.add(1, object1)
빈 인덱스를 null로 채워야 합니다.
while (arraylist.size() < position)
{
arraylist.add(null);
}
arraylist.add(position, object);
@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
*/
이 정도는 어때?while
루프가 해결책으로 될까요?
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)
생각할 수 있는 해결책은 다음과 같습니다.
list.add(list.size(), new Object());
메도팔로부터의 해결책은 당신이 찾고 있는 것이라고 생각합니다.
그러나 다른 대안으로 HashMap을 사용하고 키(Integer)를 사용하여 위치를 저장하는 방법이 있습니다.
이렇게 하면 처음에는 늘 등으로 채울 필요가 없습니다. 지도에 위치나 객체를 붙이기만 하면 됩니다.필요한 경우 마지막에 몇 줄 적어 목록으로 변환할 수 있습니다.
위치에 항목을 추가하려면 리스트 크기가 위치보다 커야 합니다.
add(2, item)
: 이 구문은 위치 2의 이전 항목을 다음 인덱스로 이동하고 두 번째 위치에 항목을 추가하는 것을 의미합니다.
2위 아이템이 없으면 이 아이템이 작동하지 않고 예외가 발생합니다.
즉, 에 무언가를 추가하고 싶은 경우position 2,
목록 크기는 최소 이상이어야 합니다.(2 + 1) =3,
아이템은 다음 사이트에서 입수할 수 있습니다.0,1,2 Position.
이 방법으로 위치 2에 안전하게 접근할 수 있으며 예외는 없습니다.
Java의 Android 플레이버를 사용하는 경우 SparseArray를 사용하는 것이 좋습니다.Map보다 정수를 객체에 효율적으로 매핑하고 반복하기 쉽습니다.
조금 늦었지만 누군가에게 도움이 될 수 있기를 바란다.
에서 ArrayList
add
로의 null 항목ArrayList
★★★★★★★★★★★★★★★.
set
필요한 경우 위치.list = new ArrayList();//Initialise the ArrayList for (Integer i = 0; i < mItems.size(); i++) { list.add(i, null); //"Add" all positions to null } // "Set" Items list.set(position, SomeObject);
하면 ArrayList
를 들어, 예를 들면, 예를 들면, '', '아까', '아까', '아까', '아까', '아까', '아까', '아까', '아까', '아까', '아까', '아까', '아까', '아까', '아까', '아까',
list = new ArrayList(mItems.size());
list.add(position, SomeObject);
이렇게 하면 위치 내의 기존 항목을 덮어쓰지 않고 기존 항목을 오른쪽으로 1개씩 이동하므로 Array List의 표시 수가 2배가 됩니다.
인덱스의 기존 값을 바꾸려면 추가 대신 설정해야 합니다.
list.add(1, object1)
list.add(2, object3)
list.set(2, object2)
목록에는 [object1,object2]가 포함됩니다.
언급URL : https://stackoverflow.com/questions/7384908/add-object-to-arraylist-at-specified-index
'programing' 카테고리의 다른 글
VueJS 서버 사이드 렌더링: 계산된 속성이 스토어의 변경을 볼 수 없습니다. (0) | 2022.08.25 |
---|---|
구성 파일을 Vue로 가져오는 방법.JS+Vuex (0) | 2022.08.24 |
Vue 3 SFC 스크립트 설정 구문을 사용하여 Vuex mapGetters를 사용하는 방법 (0) | 2022.08.24 |
Vue에서 특정 키워드를 가진 모든 $ref를 선택하려면 어떻게 해야 합니까? (0) | 2022.08.24 |
Vuetify는 불필요한 스크롤바를 추가한다. (0) | 2022.08.24 |