为什么equals方法返回false,尽管两个列表包含相同的元素

时间:2016-05-24 13:06:30

标签: java

    public class dosing {



    public List<String> dosingColumnList(String roa){

        List<String> dosingList = new ArrayList<String>();
        dosingList.add("Dose");
        dosingList.add("Time of Dose");
        dosingList.add("Tau");

        if(roa.equalsIgnoreCase("abc") ||
                roa.equalsIgnoreCase("bcd")){
        }
        else if(roa.equalsIgnoreCase("cba")){
            dosingList.add("Length of Infusion");
        }
        else if(roa.equalsIgnoreCase("cbd")){
            dosingList.add("Length of Infusion");
        }

        return dosingList;

    }

    public boolean readFile(File filePath,int sheetNo,String roa) throws InvalidFormatException, IOException{

        FileInputStream inputStream = new FileInputStream(filePath);

        Workbook wb = WorkbookFactory.create(inputStream);


        Sheet mySheet = wb.getSheetAt(sheetNo);

        List<String> dosingColumnData =dosingColumnList(roa);

        Iterator<Row> rowIter = mySheet.rowIterator();
        List<String> headerData = new ArrayList<String>();
        //rowIter.next();
        while (rowIter.hasNext()){
            Row row = rowIter.next();
            Iterator<Cell> cellIterator = row.cellIterator();
            while(row.getRowNum() == 0){
                while (cellIterator.hasNext()){

                    Cell cell = cellIterator.next();
                    if(cell.getCellType() == Cell.CELL_TYPE_STRING){
                        String varData = cell.getStringCellValue();
                        headerData.add(varData);

                    }

                }
                break;
            }

         }

        if (headerData == null || dosingColumnData == null){

        }

        if((headerData == null && dosingColumnData != null) 
          ||( headerData != null && dosingColumnData == null)
          || (headerData.size() != dosingColumnData.size())){

        }


        headerData = new ArrayList<String>(headerData); 
        dosingColumnData = new ArrayList<String>(dosingColumnData);   

        Set<String> set1 = new HashSet<String>();
        set1.addAll(headerData);
        Set<String> set2 = new HashSet<String>();
        set2.addAll(dosingColumnData);

        System.out.println(set1 + "   " + set2);

        return set1.equals(set2);
    }

}

这是我正在使用的代码...所有导入...所以headerdata列表包含来自excel表的行数据,dosingColumnData包含来自用户选择的列表.... SOP的输出是[Length,Time, Tau,Dose] [长度,时间,Tau,Dose] ...虽然上面的两组具有相同的类型,相同的大小,相同的元素顺序......但是return语句总是输出错误

2 个答案:

答案 0 :(得分:3)

我已按如下方式测试了您的代码:

List<String> headerData = Arrays.asList(new String[] {"Lenght", "Time", "Tau", "Dose"});
List<String> dosingColumnData = Arrays.asList(new String[] {"Lenght", "Time", "Tau", "Dose"});

Set<String> set1 = new HashSet<String>();
set1.addAll(headerData);
Set<String> set2 = new HashSet<String>();
set2.addAll(dosingColumnData);

System.out.println(set1.equals(set2)); // prints true

它最后打印为true,因此问题应该与headerData和dosingColumnData集合中包含的数据相关。

答案 1 :(得分:1)

打印套件的相同输出无关紧要。

这是接口equals()的{​​{1}}方法的definition

  

将指定对象与此集进行相等性比较。如果指定的对象也是一个集合,则返回true,两个集合具有相同的大小,并且指定集合的​​每个成员都包含在此集合中(或者等效地,此集合的每个成员都包含在指定的集合中)。此定义确保equals方法在set接口的不同实现中正常工作。

所以你可以自己尝试并逐步完成代码:

Set

为了正常运行,元素类必须实现方法boolean equal = set1.size() == set2.size(); if(equal) { for(Object x: set1) { if(!set2.contains(x)) { equal = false; break; } } } System.out.println(equal); equals()。类hashCode()的默认实现在大多数情况下都不可用,因为它们依赖于对象实例。