遍历set-输出顺序问题没理解

最近看到set遍历遇到问题,知道的求科普
    public static void main(String[] args) {
        List<String> list = new ArrayList<>(Arrays.asList("aa1","bb2","cc3","dd4"));
        Set<String> set = new HashSet<>();
        set.addAll(list);

        //1 迭代器
        Iterator iterator = set.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

        //2
        for(Iterator it = set.iterator();it.hasNext();){
            System.out.println(it.next());
        }
        //3 for
        for (String s : set) {
            System.out.println(s);
        }
    }