Set接口及常用子类

Set接口及常用子类

java.util.Set 接口和 java.util.List 接口一样,同样继承自 Collection 接口,它与 Collection 接口中的方法基本一致,并没有对 Collection 接口进行功能上的扩充,只是比 Collection 接口更加严格了。与 List 接口不同的是,Set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。

Set的常用方法

变量和类型方法描述
booleanadd(E e)如果指定的元素尚不存在,则将其添加到此集合,重复的值会被覆盖
voidclear()从该集合中删除所有元素
booleancontains(Object o)如果该集合包含指定的元素,则返回 true
booleanequals(Object o)将指定对象与此集合进行相等性比较,相等则返回true
booleanremove(Object o)如果指定的元素存在,则从该集合中移除该元素
intsize()返回此集合中的元素数(长度)
booleanisEmpty()如果此集合不包含任何元素,则返回 true
Object[]toArray()返回包含此set中所有元素的数组(即把集合转换为数组)

(由于Set没有get方法,因此Set集合取出元素的方式可以采用:迭代器或forEach)

HashSet集合

  • java.util.HashSet 是 Set 接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致)。
  • HashSet 是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能,底层数据结构是 HashMap 。
  • HashSet 保证元素唯一性的方式依赖于:hashCode 与 equals 方法。
public class HashSetDemo { public static void main(String[] args) {
    //创建 Set集合
    HashSet<String> set = new HashSet<String>();
    //添加元素
    set.add(new String("123"));
    set.add("123");
    set.add("123");
    set.add("321");
    //遍历
    for (String name : set) {
        System.out.println(name);
    }
}
打印结果为:
123
321
说明Set集合中不能存储重复元素,旧的元素会被覆盖。

HashSet集合存储数据的结构(哈希表)

在这里插入图片描述

TreeSet

  • TreeSet是一个有序的集合,它的作用是提供有序的Set集合
  • TreeSet是基于TreeMap实现的,支持2种排序方式:自然排序或者根据提供的 Comparator 进行排序。
  • TreeSet的迭代器是快速失败的。即当正在迭代的集合被修改时,运行出错。
  • 当集合要存储自定义类时,自定义类需要实现 Comparable 接口,并重写 comparaTo() 方法。
//自然排序
public static void main(String[] args) {
    TreeSet<String> treeset = new TreeSet<>();
    treeset.add("B");
    treeset.add("D");
    treeset.add("C");
    treeset.add("A");
    for(String s:treeset) {
        System.out.println(s);
    }
}
//输出结果:A B C D
HashSet 与 TreeSet 的常用方法基本与 Set 相同。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值