我有一个文本文件,并且其中有一个城市列表:


纽约
洛杉矶
芝加哥
约克
多伦多



我会在Java中的列表中加载每一行而没有重复项。我试图加载它,但是当我打印列表时我已经重复了。

private Set<Comune> comunilist;

public ReteStradale(){
    comunilist=new HashSet<Comune>();
}

private void loadComuni(String sname){

    try{

        BufferedReader reader=new BufferedReader(new FileReader(sname));

        String id_street=reader.readLine();

        while(id_street!=null){

            int length=Integer.parseInt(reader.readLine());
            String comune_par=reader.readLine();
            String comune_arr=reader.readLine();

            Comune com=new Comune(comune_par);

                comunilist.add(com);

            id_street=reader.readLine();
        }

    }
    catch(FileNotFoundException ffe){
        System.err.println("Error: the file does not exist!");
    }
    catch(IOException ioe){
        ioe.printStackTrace();
    }
}


这是我的代码。请不要考虑元素的名称,而是代码

最佳答案

我认为问题出在“ Comune”类上。您没有向我们显示代码,并且我假设您没有在其中实现hashCode()和equals()。

它们的默认实现(来自Object)基于对象的内存地址而不是其内容。因此,即使您创建两个具有相同城市名称的Comune对象,该Set也将它们视为完全不同的对象。

在这种情况下,您应该将名称直接存储为字符串,或者重写类的两个方法。

10-05 18:07