我有ArrayList
假设list
,它有8项AH,现在我要删除1,3,5位置存储在int数组中的项list
怎么可以我这样做。
我试图用
做到这一点ArrayList<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("F");
list.add("G");
list.add("H");
int i[] = {1,3,5};
for (int j = 0; j < i.length; j++) {
list.remove(i[j]);
}
但是在删除了第一个项目删除位置后,在下一个迭代中删除了错误的元素或者给出了异常。
答案 0 :(得分:126)
在这种特定情况下,您应该按降序删除元素。第一个索引5
,然后是3
,然后是1
。这将从列表中删除元素而没有不良副作用。
for (int j = i.length-1; j >= 0; j--) {
list.remove(i[j]);
}
答案 1 :(得分:30)
您可以使用ArrayList
,
ListIterator
中删除元素
ListIterator listIterator = List_Of_Array.listIterator();
/* Use void remove() method of ListIterator to remove an element from List.
It removes the last element returned by next or previous methods.
*/
listIterator.next();
//remove element returned by last next method
listIterator.remove();//remove element at 1st position
listIterator.next();
listIterator.next();
listIterator.remove();//remove element at 3rd position
listIterator.next();
listIterator.next();
listIterator.remove();//remove element at 5th position
答案 2 :(得分:10)
public void DeleteUserIMP(UserIMP useriamp) {
synchronized (ListUserIMP) {
if (ListUserIMP.isEmpty()) {
System.out.println("user is empty");
} else {
Iterator<UserIMP> it = ListUserIMP.iterator();
while (it.hasNext()) {
UserIMP user = it.next();
if (useriamp.getMoblieNumber().equals(user.getMoblieNumber())) {
it.remove();
System.out.println("remove it");
}
}
// ListUserIMP.remove(useriamp);
System.out.println(" this user removed");
}
Constants.RESULT_FOR_REGISTRATION = Constants.MESSAGE_OK;
// System.out.println("This user Deleted " + Constants.MESSAGE_OK);
}
}
答案 3 :(得分:7)
答案 4 :(得分:3)
String[] mString = new String[] {"B", "D", "F"};
for (int j = 0; j < mString.length-1; j++) {
List_Of_Array.remove(mString[j]);
}
答案 5 :(得分:3)
我假设数组i是升序排序的,这是Iterator的另一个解决方案,它更通用:
ArrayList<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("F");
list.add("G");
list.add("H");
int i[] = {1,3,5};
Iterator<String> itr = list.iterator();
int pos = 0;
int index = 0;
while( itr.hasNext() ){
itr.next();
if( pos >= i.length ){
break;
}
if( i[pos] == index ){
itr.remove();
pos++;
}
index++;
}
答案 6 :(得分:2)
这个怎么样?试想一下 -
import java.util.ArrayList;
class Solution
{
public static void main (String[] args){
ArrayList<String> List_Of_Array = new ArrayList<String>();
List_Of_Array.add("A");
List_Of_Array.add("B");
List_Of_Array.add("C");
List_Of_Array.add("D");
List_Of_Array.add("E");
List_Of_Array.add("F");
List_Of_Array.add("G");
List_Of_Array.add("H");
int i[] = {1,3,5};
for (int j = 0; j < i.length; j++) {
List_Of_Array.remove(i[j]-j);
}
System.out.println(List_Of_Array);
}
}
输出是 -
[A, C, E, G, H]
答案 7 :(得分:2)
以这种方式试试,
ArrayList<String> List_Of_Array = new ArrayList<String>();
List_Of_Array.add("A");
List_Of_Array.add("B");
List_Of_Array.add("C");
List_Of_Array.add("D");
List_Of_Array.add("E");
List_Of_Array.add("F");
List_Of_Array.add("G");
List_Of_Array.add("H");
int i[] = {5,3,1};
for (int j = 0; j < i.length; j++) {
List_Of_Array.remove(i[j]);
}
答案 8 :(得分:2)
arraylist的remove(int index)方法删除列表中指定位置(索引)的元素。删除arraylist项后,将任何后续元素移到左侧。
表示arraylist是否包含{20,15,30,40}
我调用了方法:arraylist.remove(1)
然后数据15将被删除并且30&amp; 40这两个项目将被移动1。
因此,您必须先删除arraylist的更高索引项。
所以..对于你给定的情况......代码将是......
ArrayList<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("F");
list.add("G");
list.add("H");
int i[] = {1,3,5};
for (int j = i.length-1; j >= 0; j--) {
list.remove(i[j]);
}
答案 9 :(得分:1)
如果使用“=”,则会为第二个中的原始arraylist创建副本,但引用相同,因此如果更改一个列表,另一个列表也会被修改。使用此而不是“=”
List_Of_Array1.addAll(List_Of_Array);
答案 10 :(得分:-1)
如果您需要删除列表中的结束项可以使用此代码
if(yourList.size() != 0){
yourList.remove(yourList.size()-1);
}
或者您可能需要在选择列表中的项目后删除一段时间
if(selected){// boolean for checked add or remove
yourList.add(position , id); // add to list by position can use your list position
}else{
if(yourList.size() != 0){
yourList.remove(position);
}
}