Set集合的特点:
- 不能存储相同的元素。
HashSet
- 散列将元素分散在表的各个位置上,所以访问它们的顺序几乎是随机的。只有不关心集合中元素的顺序时才应该使用 HashSet。
TreeSet
- TreeSet也不能存放重复对象,但是TreeSet会自动排序,如果存放的对象不能排序则会报错,所以存放的对象必须指定排序规则。排序规则包括自然排序和客户排序。
①自然排序:TreeSet要添加哪个对象就在哪个对象类上面实现java.lang.Comparable接口,并且重写comparaTo()方法,返回0则表示是同一个对象,否则为不同对象。
②客户排序:建立一个第三方类并实现java.util.Comparator接口。并重写方法。定义集合形式为TreeSet ts = new TreeSet(new 第三方类());
常用方法
HashSet<String> set = new HashSet<>();
set.add("唐僧");
set.add("孙悟空");
set.add("猪八戒");
set.add("沙僧");
set.add("唐僧");
set.add("猪八戒");
System.out.println(set);//[沙僧, 孙悟空, 猪八戒, 唐僧] 说明了hashSet 无序,不可重复的特点
HashSet<String> set = new HashSet<>();
set.add("唐僧");
set.add("孙悟空");
set.add("猪八戒");
set.add("沙僧");
set.remove("唐僧");
set.remove("白骨精");
System.out.println(set);//[沙僧, 孙悟空, 猪八戒] 如果存在就删除
HashSet<String> set = new HashSet<>();
set.add("唐僧");
set.add("孙悟空");
set.add("猪八戒");
set.add("沙僧");
set.clear();
System.out.println(set);//[]
- 是否包含指定的元素 contains(Object o)
HashSet<String> set = new HashSet<>();
set.add("唐僧");
set.add("孙悟空");
set.add("猪八戒");
set.add("沙僧");
System.out.println(set.contains("唐僧"));//true
System.out.println(set.contains("白骨精"));//false
- 返回 set 的哈希码值hashCode()
- 判断是否为空 isEmpty()
HashSet<String> set = new HashSet<>();
set.add("唐僧");
set.add("孙悟空");
set.add("猪八戒");
set.add("沙僧");
System.out.println(set.isEmpty());//false
set.clear();
System.out.println(set.isEmpty());//true
HashSet<String> set = new HashSet<>();
set.add("唐僧");
set.add("孙悟空");
set.add("猪八戒");
set.add("沙僧");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
HashSet<String> set = new HashSet<>();
set.add("唐僧");
set.add("孙悟空");
set.add("猪八戒");
set.add("沙僧");
System.out.println(set.size());//4