Set集合详讲(Set,HashSet,TreeSet)

Set

  1. Set特点

无序,无下表,不能重复(当我们new 一个HashSet实例时, 其实底层是新创建了一个HashMap实例。 放入HashSet中的集合元素实际上由HashMap的key来保存,而HashMap的value则存储了一个PRESENT,它是一个静态的Object对象。)

  1. Set创建

这里是用字符串来添加,如果是类的话,就先创建对象,然后将对象添加到set里面,方法是一致的。

Set<String> set=new HashSet<>();//如果是对类进行操作 就需要将String换成类名
  1. Set添加元素

set.add("java");
set.add("python");
set.add("C++");
set.add("python");

输出结果为python C++ java (无序和不能重复)

  1. Set遍历元素

    4.1 for-each遍历
for(String st:set){
	System.out.println(st);	
}
 4.2 使用迭代器 Iterator
Iterator<String> it=set.iterator();
while(it.hasNext){
	System.out.println(it.next());
}
  1. Set判断

set.contains("java");//元素是否存在
set.isEmpty();//集合是否为空

HashSet

  1. 特点

    1 存储结构:哈希表(数组+链表+红黑树)
    2 允许有null值
    3 基于HashCode计算元素存放位置。
    4 当存入元素的HashCode相同时,会调用equals进行确认,若结果为true,就拒绝后者存入。
    5 HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。
  2. 操作

    因为是set的实现类,其创建,添加,删除,遍历和set是一样的

TreeSet(红黑树)

  1. 特点

基于排序顺序实现元素不重复。
实现了SortedSet接口,对集合元素自动排序
元素对象的类型必须实现Comparable接口,指定排序规则
通过CompareTo方法确定是否为重复元素
2. ## 操作
其对字符串的操作和set是一样的
但在对类进行添加操作时,类必须实现Comparable接口,

implement Comparable

重写CompareTo方法

@Override
public int CompareTo(Person o){
	int n1=this.getid().compareTo(0.getid());//先比较id
	int n2=this.age-0.getAge();//然后比较两个人的年龄
return 	n1==0?n2:n1;//如果id相同,就按两个人的年龄进行比较
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sortSethashSettreeSet都是Java中的集合框架,用于存储一组元素。它们各自具有不同的特点和适用场景。 - HashSet:是基于哈希表实现的,可以快速查找元素。HashSet中的元素是无序的,不允许重复元素。因此,当需要快速查找元素且不关心元素顺序时,可以选择HashSet。 - TreeSet:是基于红黑树实现的,可以自动排序。TreeSet中的元素是有序的,不允许重复元素。因此,当需要自动排序且不允许重复元素时,可以选择TreeSet。 - SortedSet:是一个接口,继承自Set接口,它可以自动排序。SortedSet中的元素是有序的,不允许重复元素。SortedSet中有两个重要的实现类,分别是TreeSet和ConcurrentSkipListSet。当需要自动排序且不关心线程安全时,可以选择TreeSet;当需要自动排序且需要线程安全时,可以选择ConcurrentSkipListSet。 - LinkedHashSet:是基于哈希表和双向链表实现的,可以保持元素插入的顺序。LinkedHashSet中的元素是有序的,不允许重复元素。因此,当需要保持元素插入顺序且不允许重复元素时,可以选择LinkedHashSet。 总的来说,选择哪种集合框架,需要根据具体的需求来决定。如果需要快速查找元素且不关心元素顺序,可以选择HashSet;如果需要自动排序且不允许重复元素,可以选择TreeSet;如果需要保持元素插入顺序且不允许重复元素,可以选择LinkedHashSet。SortedSet可以根据需要选择具体实现类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值