HashSet, LinkedHashSet, TreeSet学习

Set

  • HashSet
    基于哈希表实现,支持快速查找,但不支持有序性操作。并且失去了元素的插入顺序信息,也就是说使用迭代器遍历HashSet得到的结果是不确定的
  • LinkedHashSet
    具有HashSet的查找效率,且内部使用双向链表维护元素的插入顺序
  • TreeSet
    基于红黑树实现,支持有序性操作,但是查找效率不如HashSet。HashSet查找的时间复杂度为O(1),TreeSet查找的时间复杂度为O(lgn)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Set<Integer> seta=new HashSet<>();
        Set<Integer> setb=new TreeSet<>();
        Set<Integer> setc=new LinkedHashSet<>();

        Random random=new Random();
        for(int i=0;i<10;i++) {
            System.out.println(random.nextInt(100));
        }
        int []num=new int[]{66,58,23,3,5,3,38,60,9,51};
        for(int a:num) {
            seta.add(a);
            setb.add(a);
            setc.add(a);
        }
        System.out.println("HashSet: "+seta);
        System.out.println("TreeSet: "+setb);
        System.out.println("LinkedHashSet: "+setc);
    }
}
HashSet: [66, 3, 51, 5, 38, 23, 9, 58, 60]
TreeSet: [3, 5, 9, 23, 38, 51, 58, 60, 66]
LinkedHashSet: [66, 58, 23, 3, 5, 38, 60, 9, 51]

从输出结果可以看出,HashSet的存储是随机的,无法预知输出的是怎样的顺序。LinkedHashSet可以保证插入的顺序,输出时按照FIFO的原则输出。TreeSet可以保证插入以后的排序大小,即输出时会按元素的排列大小关系来输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值