【问题标题】:comparing values of two arrays if exist or not比较两个数组的值是否存在
【发布时间】:2014-11-11 04:39:10
【问题描述】:

我有这段代码,用于检查两个数组并打印出另一个数组中不存在的值。我认为我这样做的方式并不是最有效的方式,因此任何人都可以提供更好的 OOP 方式来用 Java 编写这段代码吗?

谢谢

 public class Calculate {
        static int [] x = {1,2,4,6,7};
        static int [] y = {2,3,4,6,7}; 
        static boolean xflag = true;
        static boolean yflag = true;

        public static void main(String[] args) {
            // TODO Auto-generated method stub

            for(int i = 0; i<x.length; i++)
            {

            for (int b=0;  b<y.length; b++)
                {
                    if(x[i]!= y[b])
                    {
                        xflag= false;

                    }
                    else
                    {
                        xflag = true;
                        break;
                    }

                }

                if(xflag==false)
                {
                    System.out.println(x[i] +" does not exist in array 2");
                }

            }


            for(int i = 0; i<x.length; i++)
            {

            for (int b=0;  b<y.length; b++)
                {
                    if(y[i]!= x[b])
                    {
                        yflag= false;

                    }
                    else
                    {
                        yflag = true;
                        break;
                    }

                }

                if(yflag==false)
                {
                    System.out.println(y[i] +" does not exist in array1");
                }

            }





        }


    }

【问题讨论】:

  • Collections 框架有removeAllretainAll 方法在这里可能很有用。不过,不要直接对数组进行操作。
  • 是否保证数组包含相同数量的元素或已排序?
  • 我不明白你的问题 Tyler。
  • 我问你是否知道这两个数组是否总是被排序和/或包含相同数量的元素。比如两个数组都包含 5 个元素。但是,如果您不确定将使用的数组类型或只是想实现代码重用状态,我建议您使用 Jayesh 的答案,而不是发布另一个答案

标签: java arrays oop


【解决方案1】:

使用 Collection 类 removeAll 方法

  String original[] = { "1","2","3","4","6"};
     String testStr[] = { "1","2","3","5","7" };
        List origList = new ArrayList(Arrays.asList(original));
        List testList = new ArrayList(Arrays.asList(testStr));

        System.out.println(origList.removeAll(testList));
        System.out.println(origList);

【讨论】:

    【解决方案2】:

    你可以使用java集合框架,有很多功能, 这是一个简单的例子,检查一下。

    public static void main(String a[]){
    
        List<String> sl = new ArrayList<String>();
        sl.add("apple");
        sl.add("java");
        sl.add("c++");
        sl.add("unix");
        sl.add("orange");
        sl.add("airtel");
        List<String> tl = new ArrayList<String>();
        tl.add("job");
        tl.add("oracle");
        tl.add("jungle");
        tl.add("cricket");
        boolean isCommon = Collections.disjoint(sl,tl);
        System.out.println("Does not found any common elements? "+isCommon);
        tl.add("java");
        isCommon = Collections.disjoint(sl,tl);
        System.out.println("Does not found any common elements? "+isCommon);
    }
    

    【讨论】:

      【解决方案3】:

      如果你想从实现逻辑中抽象出来,你可以使用 Apache 的CollectionUtils。例如:

      public static void main(String[] args) {
              List<Integer> list1=Arrays.asList(1,2,4,6,7);
              List<Integer> list2=Arrays.asList(2,3,4,6,7);
      
          System.out.println(CollectionUtils.disjunction(list1,list2));
          }
      

      【讨论】:

        【解决方案4】:

        你可以这样编码

        List<Integer> array1 = Arrays.asList(1,2,4,6,7);
        List<Integer> array2 = Arrays.asList(2,3,4,6,7);
        
        List<Integer> disjointArray = new ArrayList<Integer>();
        for (Integer value : array1) {
            if (!array2.contains(value)) {
                disjointArray.add(value);
            }
        }
        

        然后你可以打印 disjointArray 或做任何你想做的操作。

        【讨论】:

          【解决方案5】:

          这里是一个使用 Java 集合类的运行示例:

          public class Disjunction {
              public static void main(String args[]) throws UnsupportedEncodingException {
                  //Some data preparation
                  List<Integer> list1=Arrays.asList(1,2,4);
                  List<Integer> list2=Arrays.asList(5,2,8);
          
                  //Here calculating data1-data2 and data2-data1, collect all list items
                  //that are in data1 or in data2 but not in both.
                  List<Integer> data1 = new ArrayList<>(list1);
                  data1.removeAll(list2);
                  List<Integer> data2 = new ArrayList<>(list2);
                  data2.removeAll(list1);
          
                  //Merging both results. data1 contains now exclusive or of list1 and list2
                  data1.addAll(data2);
          
                  System.out.println("exclusive or is " + data1);
              }
          }
          

          打印出来

          exclusive or is [1, 4, 5, 8]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-11-01
            相关资源
            最近更新 更多