HashSet和TreeSet

博客介绍了HashSet和TreeSet两种集合。HashSet构造函数有四个,有负载因子概念,无序、不允许重复、可存一个null,用哈希表实现,常用Collection接口方法,用foreach和迭代器遍历;TreeSet构造函数有四个,可控有序、不允许重复、不能存null,以类似二叉树方式存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HashSet

构造函数

  HashSet类的构造函数主要用的有四个,其中有两个实现是Collection接口的

  1. public HashSet()
    构造一个新的空集合,具有默认的初始容量16和默认的负载因子0.75。
  2. public HashSet(Collection<? extends E> c)
    构造一个包含指定集合中的元素的新集合
  3. public HashSet(int initialCapacity)
    构造一个新的空集合,具有指定的初始容量和默认的负载因子(0.75)。
  4. public HashSet(int initialCapacity, float loadFactor)
    构造一个新的空集合,具有指定的初始容量和指定的负载因子。
      HashSet这里除了之前在ArrayList中接触过的初始容量之外还多加了一个负载因子的概念。

特点

  1. 不保证元素顺序(无序且不可控)
  2. 不允许存储重复元素
  3. 允许使用null元素,但最多一个

  我们来通过一个例子来看看HashSet和ArrayList的区别

HashSet<String> hashSet1 = new HashSet<String>();
ArrayList<String> arrayList1 = new ArrayList<String>();
arrayList1.add("c");
arrayList1.add("b");
arrayList1.add("a");
arrayList1.add("a");
arrayList1.add("b");
arrayList1.add("e");
System.out.println(arrayList1);
hashSet1.add("c");
hashSet1.add("b");
hashSet1.add("a");
hashSet1.add("a");
hashSet1.add("b");
hashSet1.add("e");
System.out.println(hashSet1);

输出:

[c, b, a, a, b, e]
[a, b, c, e]

  可以看到HashSet和ArrayList的区别在于,ArrayList可以存放重复元素,且元素顺序和加入顺序相同,而HashSet不存储重复的元素且不保证元素顺序和加入顺序相同。而且在调用HashSet方法的时候,你会发现HashSet的方法相比于ArrayList的方法少很多,少的这些方法都是和索引有关的方法,因为HashSet无索引这个概念。
  HashSet这个集合用哈希表实现的(实际上在源码中实现HashSet是用HashMap)

常用方法

  HashSet和TreeSet常用的方法就是Collection接口中提供的方法

遍历

  HashSet集合没有索引,所以无法使用普通形式for循环来进行遍历,所以在遍历时需要使用foreach循环和迭代器的方式来完成遍历

for (String s : hashSet1) {
	System.out.println(s);
}
Iterator<String> it = hashSet1.iterator();
while (it.hasNext()) {
	System.out.println(it.next());
}

TreeSet

构造函数

  1. public TreeSet()
    默认构造函数。使用该构造函数,TreeSet中的元素按照自然排序顺序进行排列
  2. public TreeSet(SortedSet set)
    创建一个set的TreeSet集合
  3. public TreeSet(Collection<? extends E> collection)
    创建一个包含collection的TreeSet集合
  4. public TreeSet(Comparator<? super E> comparator)
    指定TreeSet的比较器

特点

  1. 可控的有序(自然顺序和自定义顺序)
  2. 不允许元素重复
  3. 不能存null

  TreeSet是以类似二叉树的方式存储的,它的有序是在添加的时候就知道这个数据要添加到那个位置,这个判断大小是用compareTo方法决定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值