【问题标题】:Comparing elements in the same List Java比较同一 List Java 中的元素
【发布时间】:2014-05-08 07:25:06
【问题描述】:

我想比较同一 List (The List "list) 中的元素,如果它们相同,打印一行,我对编程还很陌生,我还没有完全理解 区别 strong>List 和 array 以及何时使用它们。

有人好心地建议了下面的代码,尽管它可以编译,但没有打印出来。由于我的数组中有两对,我希望至少打印一次。任何帮助将不胜感激!

                        List<Double> list = new ArrayList<Double>();

                        while (search.find()){ 
                            list.add(Double.parseDouble(search.group(1)));
                        }


                        for(int i= 0 ; i < list.size()-1; i++){
                            //System.out.println(list.get(i));  // Successfully prints out all doubles in the SHADING:BUILDING:DETAILED class
                            for(int k = i+1 ; k < list.size() ; k++){
                                if(list.get(i) == list.get(k)){
                                    System.out.println(i + "and" + k + "are pairs");
                                }
                            }
                        }           
                    }
                }

【问题讨论】:

  • 如果您有适用于数组的代码并且您不知道两者之间的区别,为什么还要使用列表。我强烈建议您阅读文档,以便您更好地了解这两个文档,以便找出您需要哪个文档

标签: java list arraylist


【解决方案1】:

您对比较进行编码的方式会重复。此外,恐怕这不是您访问列表中元素的正确方式。

例如,假设你有 i = 0(例如值 2.0)和 k = 2(值 5.2),但后来你有 i = 2 (5.2) 和 k = 0 (2.0),这是相同的。我建议你以下,避免这种重复。

for (int i = 0; i < list.size()-1; i++) 
   for (int k = i+1; k < list.size(); k++) 
      if(list.get(i) == list.get(k))
         System.out.println(i + " and "+ k +" are pairs");

当然,你必须确保列表的大小大于1,否则会抛出OutOfBoundsException。 希望对你有帮助^^

编辑 #2 如果它包含一个空安全的等号,请尝试使用以下内容:

if(Objects.equals(list.get(i), list.get(k)))

【讨论】:

  • 感谢这编译得很好,但我没有得到任何打印出来
  • 也许没有相同值的数字^^。尝试手动添加一些,看看它是否适合您。
  • 肯定有数字具有相同的值我不确定发生了什么我正在尝试不同的格式
  • 当我有 if(list.get(i) != list.get(k)) 时,它会打印出来,所以我很确定格式没有问题;但是我要比较的数字非常精确,例如 2.1612378517 我应该使用双精度数还是比较它们或其他什么?
【解决方案2】:

首先,你应该修复:

if(list[i]=  list[k]){

成为:

if(list.get(i) == list.get(k)){

其次,您应该添加一个条件以确保 i != k(或者换句话说 - 您没有将元素与自身进行比较。

第三,你不能像你一样访问一个列表:list[i]你应该使用list.get(i)

【讨论】:

    【解决方案3】:

    您可以使用以下代码:

    public void compareElementToList() {
    
        List<Double> list = Arrays.asList(1.0, 1.2, 1.3, 1.4, 1.0);
    
        for (int i = 0; i < list.size(); i++) {
            Double itemI = list.get(i);
            for (int j = 0; j < list.size(); j++) {
                Double itemJ = list.get(j);
                if (i != j) {
                    if (itemI.compareTo(itemJ) == 0) {
                        System.out.println("Element " + i + " and " + j + " are pairs.");
                    } else {
                        System.out.println("There are no even elements.");
                    }
                } else {
                    System.out.println("Element omited.");
                }
            }
        }
    
    }
    

    【讨论】:

      【解决方案4】:

      列表基本上只是一个可变长度数组。您可以使用 get(int) 方法从中获取数据,该方法从列表中获取第 n 个值,然后 set(int, Object) 将第 n 个值设置为给定对象。

      javadocs 是你的朋友。 http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-31
        • 1970-01-01
        • 2017-08-11
        • 1970-01-01
        • 2018-03-24
        • 1970-01-01
        • 2010-09-20
        相关资源
        最近更新 更多