public static void main(String[] args) {
Set<String> names = new HashSet<String>();
names.add("傻子");///添加元素
names.add("憨批");
names.add("憨批");
//List可以存储重复数据,但是Set不行
int size = names.size();
System.out.println(size);//所以其集合长度为2
//List集合按照存储顺序保存的,Set集合中HashSet不是按照存储的顺序保存,具有不确定性;LinkedHashSet是按照用户存储的顺序存储的;TreeSet按照自然顺序保存
for (String n : names) {
System.out.println(n);//输出顺序不确定
}
}
原因:
//Set<String> names = new HashSet<String>();//调用HashSet构造方法
//public HashSet() {
// map = new HashMap<>();//为map成员变量赋值,HashMap对象
//}
names.add("憨憨");//源码:
//public boolean add(E e) {
// return map.put(e, PRESENT)==null;//向Map集合中HashMap容器添加数据 PRESENT常量(map = new HashMap<>();< , >中写的是数据类型,且不是数据的包装类,如:<String,Integer>)
//本质:HashSet存储数据时本质是存到了HashMap集合的key(而value都是PRESENT)
//}
boolean flag = names.isEmpty();//判断是否为空
System.out.println(flag);
names.clear();//清空集合数据。
flag = names.isEmpty();
System.out.println(flag);
因为Set集合中HashSet不是按照存储的顺序保存,具有不确定性;LinkedHashSet是按照用户存储的顺序存储的;TreeSet按照自然顺序保存。所以在遍历时只能通过加强循环和遍历器iterator来实现
//加强循环
for (String str : names) {
System.out.println(str);
}
//遍历器
Iterator iterator= names.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}