哈希集输出不匹配[JAVA]

哈希集输出不匹配[JAVA],java,collections,hashset,Java,Collections,Hashset,代码从文件中读取并生成哈希集,然后输出到控制台 我的代码输出与预期输出不匹配。 我的java代码是 Main.java import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class Main { pub

代码从文件中读取并生成哈希集,然后输出到控制台

我的代码输出与预期输出不匹配。

我的java代码是

Main.java

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader brf = new BufferedReader(new FileReader("calllog.txt"));


        Set<String> phoneNumberList = new HashSet<String>();


        String read = "";
        while ((read = brf.readLine()) != null) {

            String[] callList = read.split(",");


            String in = callList[0];
            phoneNumberList.add(in);     //add(new CallLog(callList[0], startTime, endTime));


        }
        brf.close();

        Iterator<String> itr = phoneNumberList.iterator();

        while(itr.hasNext()){
            System.out.println(itr.next());
        }


    }

}
我的输出

9123456789
9764318520
0422-201430
8123456789
预期产出

8123456789
9764318520
0422-201430
9123456789

HashSet
没有顺序,因此您没有理由期望元素的特定顺序

如果希望根据插入顺序对元素进行排序,可以使用
LinkedHashSet
,但这会给您

8123456789
9123456789
0422-201430
9764318520

这不是您期望的顺序。

输出系统依赖于还是jdk依赖?@Ankussingh在不同的jdk版本中可能会有所不同,因为它取决于HashMap/HashSet的内部实现。它不仅依赖于jdk,还依赖于
HashSet
的内部状态。考虑,这表明相同的元素可以有不同的排序。@安迪,我可以通过实现我自己的HASCODE()来改变输出的顺序。只是wondering@Ankush实现哈希代码并不会减少未定义的顺序。它可能会改变观察到的迭代顺序,但不是以有意义或可靠的方式。