【JAVA】set集合(HashSet、LinkedHashSet、TreeSet)

集合set

包括HashSet、LinkedHashSet、TreeSet,都不是线程安全的

HashSet
  • 底层数据结构:哈希表(无序,唯一)
  • 查询效率:高
  • 保证元素唯一性的方式:equals()方法返回true,hashCode()方法返回相同值时判定相同
  • 允许存在null数据
LinkedHashSet
  • 底层数据结构:链表和哈希表(FIFO插入,有序,唯一)
  • 查询效率:低于HashSet
  • 主要功能:用于保证集合的有序
  • 保证元素有序的方式:链表
  • 保证元素唯一的方式:哈希表
  • 允许存在null数据
TreeSet
  • 底层数据结构:红黑树(唯一、有序)
  • 查询效率:最慢
  • 主要功能:用于排序
  • 保证元素有序的方式:自然排序、比较器排序
  • 保证元素唯一的方式:根据比较的返回值是否为0
  • 不允许存在null数据,必须放入同样类的对象



HashSet的使用

public class TestHashSet {
	public static void main(String[] args) {
		HashSet<Fruit> set=new HashSet<>();
		Fruit apple=new Fruit(10);
		Fruit banana=new Fruit(4);
		Fruit pear=new Fruit(8);
		Fruit strawberry=new Fruit(39);
		Fruit blueberry=new Fruit(36);

		set.add(apple);
		set.add(banana);
		set.add(pear);
		set.add(strawberry);
		set.add(blueberry);
		
		Iterator<Fruit> fruits=set.iterator();
		while(fruits.hasNext())
			System.out.print(fruits.next());
	}
}

class Fruit{
	int price;
	
	public Fruit(int price) {
		this.price=price;
	}
	
	public String toString() {
		return price+" ";
	}
}

输出(乱序输出):
在这里插入图片描述



LinkedHashSet

public class TestLinkedHashSet {
	public static void main(String[] args) {
		LinkedHashSet<Fruit> set=new LinkedHashSet<>();
		Fruit apple=new Fruit(10);
		Fruit banana=new Fruit(4);
		Fruit pear=new Fruit(8);
		Fruit strawberry=new Fruit(39);
		Fruit blueberry=new Fruit(36);

		set.add(apple);
		set.add(banana);
		set.add(pear);
		set.add(strawberry);
		set.add(blueberry);
		
		Iterator<Fruit> fruits=set.iterator();
		while(fruits.hasNext())
			System.out.print(fruits.next());
	}
}

class Fruit{
	int price;
	
	public Fruit(int price) {
		this.price=price;
	}
	
	public String toString() {
		return price+" ";
	}
}

输出:(按照加入set的顺序输出)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值