Java 使用其他列表从列表中删除元素

Java 使用其他列表从列表中删除元素,java,collections,Java,Collections,我试图从列表1中删除列表1中的元素 package listCollection; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Arry2List { public static void main(String[] args) { String[] s = {"INDIA" ,"JAPAN","THA

我试图从列表1中删除列表1中的元素

    package listCollection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;



public class Arry2List {

    public static void main(String[] args) {


        String[] s = {"INDIA" ,"JAPAN","THAILAND","MALAYSIA"};
        ArrayList<String> list1= new ArrayList<String>();
        String[] s1 = {"THAILAND","MALAYSIA"};
        ArrayList<String> list2= new ArrayList<String>();

        for(String temp : s)
        {
            list1.add(temp);
        }
        for(String temp : s1)
        {
            list2.add(temp);
        }


        //removing elements from list1 that are in list2


        System.out.println("In list1 **************");
        for (String t : list1)
        {
            System.out.println(t);
        }
        System.out.println("In list2 **************");
        for (String t1 : list2)
        {
            System.out.println(t1);
        }
        //editlist(list1,list2);
        Iterator<String> i=list1.iterator();

          while( i.hasNext() )
          {
               if ( list2.contains( i.hasNext() ) )
               {
                   i.remove();
               }

          }
        System.out.println("In list1 again **************");

        for(int i1 =0;i1<list1.size();i1++)
        {
            System.out.println(list1.get(i1));
        }


    }




    }
包列表集合;
导入java.util.ArrayList;
导入java.util.Collection;
导入java.util.Iterator;
公共类列表{
公共静态void main(字符串[]args){
字符串[]s={“印度”、“日本”、“泰国”、“马来西亚”};
ArrayList list1=新的ArrayList();
字符串[]s1={“泰国”、“马来西亚”};
ArrayList list2=新的ArrayList();
用于(字符串温度:s)
{
列表1.添加(临时);
}
用于(字符串温度:s1)
{
列表2.添加(临时);
}
//正在从列表1中删除列表2中的元素
System.out.println(“列表1*************”;
for(字符串t:list1)
{
系统输出打印ln(t);
}
System.out.println(“列表2*************”;
for(字符串t1:list2)
{
系统输出打印项次(t1);
}
//编辑列表(列表1、列表2);
迭代器i=list1.Iterator();
while(i.hasNext())
{
if(list2.contains(i.hasNext()))
{
i、 删除();
}
}
System.out.println(“再次在列表1中**********”;

对于(int i1=0;i1有一个内置的方法来实现这一点:

list1.removeAll(list2)
[编辑]

使用Arrays.asList可以更轻松地创建列表

List<String> list1 = new ArrayList<String>(Arrays.asList("INDIA", "JAPAN", "THAILAND", "MALAYSIA"));
List<String> list2 = Arrays.asList("THAILAND", "MALAYSIA");
list1.removeAll(list2);
您还可以迭代
list2
元素,并将它们从
list1
中删除:

    for (String el : list2) {
        list1.remove(el);
    }

在使用
List.contains()
检查元素的循环中,您传递的是一个布尔值(
i.hasNext()
返回迭代器是否有更多元素),而不是元素。这会导致循环无限运行,因为您从未调用
iterator.next()
来获取下一个元素。您应该使用:

if (list2.contains(i.next())) {
而不是

if (list2.contains(i.hasNext())) {
更好的做法是将下一个元素保存在变量中以供重用:

while (i.hasNext()) {
    String element = i.next();
    if (list2.contains(element)) {
        i.remove();
    }
}

很酷,它工作了。但是为什么我的代码运行不确定。我正在尝试学习各种方法OK。检查EDIT3…:)谢谢。当我获得所需的reputation@user2389441如果你在一些答案中找到了问题的解决方案,你应该选择你最喜欢的答案,我正在想办法解决这个问题
while (i.hasNext()) {
    String element = i.next();
    if (list2.contains(element)) {
        i.remove();
    }
}