Set集合类常用的API

Set集合类常用的API

JDKAPI中所提供的Set集合类常用的有:

​ HashSet:散列存放**

​ TreeSet:有序存放**

​ LinkedHashSet: 有次序

1. HashSet

众所周知,HashMap是Key-Value的形式存储存储的。而HashSet是基于HashMap实现的。
它是一个默认构造方法是构建一个初始容量为16,负载因子为0.75 的HashMap。
是封装一个HashMap对象来存储集合的。
集合元素实际上由 HashMap 的 key 来保存,而 HashMap 的 value 则存储了一个 PRESENT,它是一个静态的 Object 对象。

想要存放对象元素进HashSet,我们需要重写该类的equals(Object obj)方法和 hashCode() 方法;
而且这两个方法的返回值必须保持一致:当该类的两个的 hashCode() 返回值相同时,它们通过 equals() 方法比>较也应该返回true。

正常使用,操作方法都是基于HashMap

Set set = new HashSet();
set.add("b");
set.add("g");
set.add("d");
set.add("a");et.add("c");
set.add("f");
System.out.println("set 集合:" + set);
set.remove("a");
System.out.println("set 集合:" + set);

在这里插入图片描述
可以看得出,我们存储进去的顺序跟取出的顺序不一样,提现出它的无序性。

再来看:

Set set = new HashSet();
set.add("b");
set.add("b");
set.add("b");
set.add("b");
set.add("b");
System.out.println("set 集合:" + set);

在这里插入图片描述
明明。我已经Add了5个 “b” 进HashSet,为什么打印出来只有一个?因为Set的集合的特点就是元素是唯一的。

2. TreeSet

TreeSet使用红黑树结构对加入的元素进行排序存放,所以放入TreeSet中元素必须是可排序 的。

TreeSet的两种排序方式:
1.自然排序(默认)
2.定制排序

自然排序

TreeSet调用调用集合元素的CompareTo()方法,根据该方法的返回值来比较元素之间的大小,然后进行“升序”排列,这种排序方式我们称之为自然排列。

如果想采用自然排序,则要存储的对象所属类必须实现Comparable 接口。该接口只有一个方法public int compareTo(Object obj),必须实现该方法。

compareTo方法的实现规则:

​	返回 0,表示 this == obj。//则不会添加新对象

​	返回正数,表示 this> obj  //添加到原来对象的右边

​	返回负数,表示 this < obj // 添加到原来对的左边

定制排序

使用Comparable接口定义排序顺序有局限性:实现此接口的类只能按compareTo()定义的这一种方式排序。

如果需要更加灵活地排序,我们可以自定义(Comparator)比较器,在创建TreeSet集合对象时把我们自定义的比较器传入,则可以TreeSet会按照我们的比较器中定义的规则进行排序。

自定义比较器类,需要实现Comparator接口。Comparator接口只有一个抽象方法需要实现:public int compare(Object a, Object b);

判断规则:

​	返回 0,表示a == b

​	返回正数,表示b > b

​	返回负数,表示a < b

3. LinkedHashSet

LinkedHashSet根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。

LinkedHashSet的方法与它父类HashSet方法是一样的

如果我们需要迭代的顺序为插入顺序或者访问顺序,并且保证元素存储的唯一.
LinkedHashSet 是首选。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值