使用HashSet()实现Set集合,foreach输出结果一直固定的,不是应该每次结果都不同吗?

package test;

import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;

public class Test24 {

public static void main(String[] args) {
    Set<String> s = new HashSet<>();
    s.add("王小明");
    s.add("李四");
    s.add("赵七");
    s.add("何六");
    s.add("方三");
    //使用foreach对set集合s进行循环遍历
    for (String name : s) {
        System.out.println(name);
    }
}

}

HashSet() 其实是有序的, 但不是元素的添加顺序. 它的顺序和元素hashcode 有关.

Set集合里元素没变,hashcode也不变(String 的hashcode 由里面的"字符串"算出来,因此hashcode值是国定不变的) 所以集合 顺序就不会变

按照你add的顺序输出的。

set是说不是排序的,但它还是有一个自己的内部顺序。你数据相同,那么输出就还是按照那个顺序

对于相同的条件和数据,是确定的,对于某个数据,不能直观地得到顺序,所以是不确定的。

其实是有顺序的,hashset底层由hashmap实现,看hashmap的getset

hashset 有自己的排序规则