Set、List、Map简析

Set、List、Map

  1. 简介
    Set和List是Collection派生的两个子接口。
  2. Set
    特点:无序,元素唯一(不能重复)
    HashSet: 基于HashMap实现的,可快速查询,hashset中的元素都存在key上,value都是一个统一的对象PRESENT。使用add方法插入值
        //创建HashSet
        HashSet<String> set = new HashSet<String>();
        set.add("f");
        set.add("g");
        set.add("h");
        set.add("i");
        set.add("j");

TreeSet: 可以对元素进行排序,需要实现Comparable接口,重写compareTo()方法。

        TreeSet<String> set1 = new TreeSet<String>();
        set1.add("f");
        set1.add("g");
        set1.add("h");
        set1.add("i");
        set1.add("j");
  1. List
    特点:查找元素效率高,元素有放入顺序,可以重复。
    ArrayList: 随机访问,查找和遍历的效率高,未指定大小时,默认大小为10,如果超过了这个大小,则需要对它进行扩容(未定义大小),如果定义了大小,没有超过,则不需要扩容。
        //创建ArrayList
        ArrayList<String> list = new ArrayList<String>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");

LinkedList: 基于双向链表,快速插入、删除。
Vector: 与ArrayList 类似线程安全
4. Map
特点:无序,保存键值对,键不能重复,值可以重复
HashMap: 线程不安全,允许键和值为空(null),默认长度为16,负载因子0.75。使用链地址法减少哈希冲突(哈希冲突:在存入元素时,hash地址已被其它元素占用),采用数组加链表的形式,数组为主题,链表向下扩张,当链表长度超过8,链表会自动转化为红黑树,使用开放定址法处理哈希冲突(在当前位置发生冲突,则重新产生另一个哈希地址存值,如果还是冲突,则继续之前的操作,一直到不发生冲突,成功存值)。

        HashMap<Integer,String> map = new HashMap<Integer, String>();
        map.put(1,"k");
        map.put(2,"l");
        map.put(3,"m");
        map.put(4,"n");
        map.put(5,"o");

HashTable: 线程安全,方法声明使用到了synchronized(一种同步锁),默认大小为11,与HashMap的区别在于多线程安全,但几乎被淘汰了,因为几乎所有的方法都加了锁,使得效率低下,现在对于多线程一般使用ConcurrentHashMap,这是一种高效而且线程安全的集合(HashTable对整个集合加锁,而ConcurrentHashMap则只对需要操作的地方加锁,因此高效)。
TreeMap:可以对元素进行比较。需要实现ocmparator接口,重写compare方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

☆叙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值