【问题标题】:Compare two arraylist比较两个arraylist
【发布时间】:2011-08-24 10:28:40
【问题描述】:

我有两个数组列表:

ArrayList a1 = new ArrayList();
a1.add("5");
a1.add("10");
a1.add("20");
a1.add("50");
a1.add("100");
a1.add("500");
a1.add("1000");

ArrayList a2 = new ArrayList();
a2.add("50");
a2.add("500");
a2.add("1000");

如何比较这两个数组列表并添加到新的数组列表(a3)中,如果 a2 存在于 a1 中,则添加 1,如果不存在则为 0,所以结果将在下面为 arraylist a3?

a3[0] = 0
a3[1] = 0
a3[2] = 0
a3[3] = 1
a3[4] = 0
a3[5] = 1
a3[6] = 1

提前致谢

【问题讨论】:

    标签: java comparison arraylist


    【解决方案1】:

    首先,我建议您use generics。其次,a2 可以改为Set。第三,您可能希望将 String 更改为 Integer(因为它们都是整数)。

    但对于您的示例,这是一种方法:

    ArrayList<Integer> a3 = new ArrayList<Integer>();               
    for (String a : a1)
        a3.add(a2.contains(a) ? 1 : 0);
    

    完整示例(带有HashSetInteger 类型):

    public static void main(String... args) {
        List<Integer> a1 = Arrays.asList(5, 10, 20, 50, 100, 500, 1000);
        Set<Integer>  a2 = new HashSet<Integer>(Arrays.asList(50, 500, 1000));
    
        ArrayList<Integer> a3 = new ArrayList<Integer>();                
    
        for (Integer a : a1)
            a3.add(a2.contains(a) ? 1 : 0);
    
        System.out.println(a3);
    }
    

    输出:

    [0, 0, 0, 1, 0, 1, 1]
    

    【讨论】:

      【解决方案2】:

      这样就可以了。

      请注意,您的问题将 int[] 指定为输出类型,这不是我会选择的 - List 可能会更好,但是这个答案符合您的要求,与我迄今为止看到的所有其他答案不同。

      public static void main(String[] args) {
          ArrayList<String> a1 = new ArrayList<String>();
          a1.add("5");
          a1.add("10");
          a1.add("20");
          a1.add("50");
          a1.add("100");
          a1.add("500");
          a1.add("1000");
      
          ArrayList<String> a2 = new ArrayList<String>();
          a2.add("50");
          a2.add("500");
          a2.add("1000");
      
          int[] matches = new int[a1.size()];
      
          int i = 0;
          for (String s : a1)
              matches[i++] = a2.contains(s) ? 1 : 0;
      
          System.out.println(Arrays.toString(matches));
      }
      

      输出:

      [0, 0, 0, 1, 0, 1, 1]
      

      【讨论】:

        【解决方案3】:

        您可以使用contains(Object o) method of ArrayList 检查元素是否存在于第二个数组列表中,并相应地将元素添加到第三个列表中,例如:

        for(String temp: a1)
        {
           if(a2.contains(temp)) 
           {
              a3.add(1);
           }
           else
           {
             a3.add(0);
           }
        }
        

        【讨论】:

          【解决方案4】:

          伪代码

          Check both a1 and a2 for length. say a1 is longest
          a3 = new arraylist(a1.length) 
          for(i=0 to a2.length)
           if(a1.contains(a2.get(i))
            a3.get(i)++;
          

          【讨论】:

            【解决方案5】:

            类似这样的:

            ArrayList<Integer> a3 = new ArrayList<Integer>();
            
            for (String v : a1) {
                if (a2.contains(v)) {
                    a3.add(1);
                } else {
                    a3.add(0);
                }
            }
            

            【讨论】:

              猜你喜欢
              • 2013-05-03
              • 2012-01-25
              • 2021-06-04
              • 2013-01-15
              • 2014-12-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-07-23
              相关资源
              最近更新 更多