如何根据订单从ArrayList获取不常见的元素

时间:2014-11-27 14:46:17

标签: java

我正在根据订单

比较两个ArrayLists

total_list的大小将始终大于sub_list

import java.util.ArrayList;

import org.json.JSONException;

public class MrTest {

    public static void main(String args[]) throws JSONException
    {



        ArrayList<String> total_list = new ArrayList<String>();
        ArrayList<String> sub_list = new ArrayList<String>();

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

        total_list.add("Beverages");
        total_list.add("Hot");
        total_list.add("Sai1");
        total_list.add("Sai2");
        total_list.add("Sai3");


        sub_list.add("Sai1");
        sub_list.add("Sai2");
        sub_list.add("Sai3");




        for(int i=0;i<total_list.size();i++)
        {

            String total_name = total_list.get(i);
            String sub_name = sub_list.get(i);

            if(total_name.equals(sub_name))
            {

            }
            else
            {
                un_common_list.add(total_name);
            }


        }


        System.out.println(un_common_list);
    }
}

我正在

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
    at java.util.ArrayList.rangeCheck(ArrayList.java:604)
    at java.util.ArrayList.get(ArrayList.java:382)
    at MrTest.main(MrTest.java:35)

我希望输出为

[Beverages, Hot]

任何人都可以帮助我,如何将输出作为

[Beverages, Hot] in this case ??

5 个答案:

答案 0 :(得分:2)

我想你只是想:

total_list.removeAll(sub_list);

如果您想保留total_list

List<String> uncommon = new ArrayList<>(total_list);
uncommon.removeAll(sub_list);

答案 1 :(得分:1)

您对两个列表使用相同的索引,导致子列表超出范围。在循环中使用循环,并使用布尔值检查它是否与任何值匹配,如果它不匹配,则应将该字符串添加到不常见的列表中。

boolean inlist=false;
 for(int i=0;i<total_list.size();i++)
    {

        String total_name = total_list.get(i);

        for(int k=0;k<sub_list.size();k++)
        {
            String sub_name = sub_list.get(k);


            if(total_name.equals(sub_name))
            {
              inlist=true;
            }

        }
       if (!inlist){un_common_list.add(total_name);}
       inlist=false;
  }

答案 2 :(得分:0)

    for(int i=0;i<total_list.size();i++) 
    // Total_list size is 5
    {

        String total_name = total_list.get(i);
        String sub_name = sub_list.get(i);
        // sub_list size is 3, 
        // but you are calling sublist.get(3), sublist.get(4) and sublist.get(5)
    }

答案 3 :(得分:0)

我将使用1循环,首先使用System.arraycopy将total_list的副本复制到un_common_list,然后迭代sub_list并从un_common_list中删除sub_list中的元素,顺序应该保留

但是removeAll()也应该保留顺序,只需使用数组副本

答案 4 :(得分:0)

如果要保持插入顺序,那么可以尝试这种情况

for(int i=0;i<total_list.size() && i<sub_list.size();i++)