Java 尽管两个列表包含相同的元素,为什么equals方法返回false 公共类{ 公共列表剂量列列表(字符串roa){ List dosingList=新建ArrayList(); 剂量列表。添加(“剂量”); 剂量列表。添加(“剂量时间”); 剂量列表。添加(“Tau”); if(居留权等信号情况(“abc”)|| roa.equalsIgnoreCase(“bcd”)){ } 其他条件(居留权等信号案件(“cba”)){ 剂量列表。添加(“输液长度”); } 否则如果(居留权等信号情况(“cbd”)){ 剂量列表。添加(“输液长度”); } 返回剂量表; } 公共布尔readFile(文件路径、int sheetNo、字符串roa)引发InvalidFormatException、IOException{ FileInputStream inputStream=新的FileInputStream(filePath); 工作簿wb=WorkbookFactory.create(inputStream); 图纸mySheet=wb.getSheetAt(图纸编号); List dosingColumnData=dosingColumnList(roa); 迭代器rowIter=mySheet.rowitter(); List headerData=new ArrayList(); //rowIter.next(); while(rowIter.hasNext()){ Row=rowIter.next(); 迭代器cellIterator=row.cellIterator(); while(row.getRowNum()==0){ while(cellIterator.hasNext()){ Cell=cellIterator.next(); if(cell.getCellType()==cell.cell\u类型\u字符串){ String varData=cell.getStringCellValue(); headerData.add(varData); } } 打破 } } 如果(headerData==null | | dosingColumnData==null){ } if((headerData==null&&dosingColumnData!=null) ||(headerData!=null&&dosingColumnData==null) ||(headerData.size()!=dosingColumnData.size()){ } headerData=新阵列列表(headerData); dosingColumnData=新阵列列表(dosingColumnData); Set set1=新的HashSet(); set1.addAll(headerData); Set set2=新的HashSet(); set2.addAll(剂量列数据); 系统输出打印项次(set1+“”+set2); 返回set1.equals(set2); }

Java 尽管两个列表包含相同的元素,为什么equals方法返回false 公共类{ 公共列表剂量列列表(字符串roa){ List dosingList=新建ArrayList(); 剂量列表。添加(“剂量”); 剂量列表。添加(“剂量时间”); 剂量列表。添加(“Tau”); if(居留权等信号情况(“abc”)|| roa.equalsIgnoreCase(“bcd”)){ } 其他条件(居留权等信号案件(“cba”)){ 剂量列表。添加(“输液长度”); } 否则如果(居留权等信号情况(“cbd”)){ 剂量列表。添加(“输液长度”); } 返回剂量表; } 公共布尔readFile(文件路径、int sheetNo、字符串roa)引发InvalidFormatException、IOException{ FileInputStream inputStream=新的FileInputStream(filePath); 工作簿wb=WorkbookFactory.create(inputStream); 图纸mySheet=wb.getSheetAt(图纸编号); List dosingColumnData=dosingColumnList(roa); 迭代器rowIter=mySheet.rowitter(); List headerData=new ArrayList(); //rowIter.next(); while(rowIter.hasNext()){ Row=rowIter.next(); 迭代器cellIterator=row.cellIterator(); while(row.getRowNum()==0){ while(cellIterator.hasNext()){ Cell=cellIterator.next(); if(cell.getCellType()==cell.cell\u类型\u字符串){ String varData=cell.getStringCellValue(); headerData.add(varData); } } 打破 } } 如果(headerData==null | | dosingColumnData==null){ } if((headerData==null&&dosingColumnData!=null) ||(headerData!=null&&dosingColumnData==null) ||(headerData.size()!=dosingColumnData.size()){ } headerData=新阵列列表(headerData); dosingColumnData=新阵列列表(dosingColumnData); Set set1=新的HashSet(); set1.addAll(headerData); Set set2=新的HashSet(); set2.addAll(剂量列数据); 系统输出打印项次(set1+“”+set2); 返回set1.equals(set2); },java,Java,} 这是我正在处理的代码…所有导入…因此headerdata列表包含来自excel工作表的行数据,dosingColumnData包含来自用户选择的列表…SOP的输出为[长度、时间、τ、剂量][长度、时间、τ、剂量]。。。尽管上面的两个集合具有相同的类型、相同的大小、相同的元素顺序…返回语句始终输出false我已按如下方式测试了您的代码: public class dosing { public List<String> dosingColumnList(Str

}


这是我正在处理的代码…所有导入…因此headerdata列表包含来自excel工作表的行数据,dosingColumnData包含来自用户选择的列表…SOP的输出为[长度、时间、τ、剂量][长度、时间、τ、剂量]。。。尽管上面的两个集合具有相同的类型、相同的大小、相同的元素顺序…返回语句始终输出false

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

    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);
    }
List headerData=Arrays.asList(新字符串[]{“lengh”、“Time”、“Tau”、“Dose”});
List dosingColumnData=Arrays.asList(新字符串[]{“lengh”、“Time”、“Tau”、“Dose”});
Set set1=新的HashSet();
set1.addAll(headerData);
Set set2=新的HashSet();
set2.addAll(剂量列数据);
System.out.println(set1.equals(set2));//打印正确

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

打印集合的相同输出是不相关的

这是接口
Set
equals()
方法的关键:

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

因此,您可以自己尝试并逐步完成以下代码:

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

为了正常运行,元素类必须实现方法
equals()
hashCode()
。类
Object
的默认实现在大多数情况下不可用,因为它们依赖于对象实例。

调用equals时,不需要将
set2
强制转换为对象method@Eran我的集合中的元素是字符串。你能发布一个吗?我无法复制。可能是@InFed的重复。这是第三次有人要求您提供填充这些集合的代码。如果您没有向我们提供足够的信息,您怎么能期望得到帮助…?谢谢您的回答..我按照您的建议进行了调试..一组中的某些字符串未被另一组接受..我现在必须知道原因..谢谢
boolean equal = set1.size() == set2.size();
if(equal) {
  for(Object x: set1) {
    if(!set2.contains(x)) {
      equal = false;
      break;
    }
  }
} 
System.out.println(equal);