Java 集合整理

 public static void main(String[] args) {

        /**
         * 数组实现
         * 有序,可重复
         * 优点:允许随机访问
         * 缺点:内存是连续的 扩展空间的时候需要新开辟空间将原有数据放进去,
         * 插入删除比较慢 因为需要数组的移动、复制 线程不安全
         */
        List<String> list1 = new ArrayList<>();
        /**
         * 数组实现
         * 有序,可重复
         * 优点:线程安全 add方法使用的是重量锁synchronized
         * 缺点:访问没有list快
         */
        Vector<String> list2 = new Vector<>();
        /**
         * 双向循环链表结构
         * 有序,可重复
         * 查询慢 增删快 add remove
         * 线程不安全 线程安全则使用 ConcurrentLinkedQueue
         */
        LinkedList<String> list3 = new LinkedList<>();

        /**
         * hashSet
         * 排列无序 不可重复 hashMap实现 存取快
         * 线程不安全
         */
        HashSet<String> hashSet = new HashSet<>();

        /**
         * treeSet
         * 排列无序 不可重复
         * 底层原理: 二叉树 排序存储 内部是TreeMap 的SortedSet
         */
        TreeSet<String> treeSet = new TreeSet<>();

        /**
         * hashMap
         * map为线程不安全 ConcurrentHashMap为线程安全
         * map 允许一个键为null  键的hashCode作来存储数据
         * 在java7中 hashMap的实现方式为数组+单向链表 查找数据的时候 根据hashCode
         * 找到对应的数组下标之后再在单链表中查找数据 所以时间复杂度取决于单链表的长度 o(n)
         * java中 引入了红黑树 当单链表的长度超过8个之后 会将链表转换为红黑树,
         * 时间复杂度降低到了o(logN)
         * 扩容问题:扩容有两种清空 一个是初始化的时候 并没有开辟空间 put值的时候才开辟空间
         * 第二个是++size > threshold 空间的大小扩容后 大于阈值的时候 进行扩容
         *
         * 扩容需要和最大值比较 如果满足条件 阈值翻倍 容量翻倍
         * 每次扩容的时候 都会重新计算每个数据的hash值 所以 如果数量过大的话
         * 扩容的时候就会存着很大的性能问题
         * HashMap默认容量大小 16 最大: 2<<31  2的31次方
         */
        Map<String, String> map = new HashMap<>();

        /**
         * 线程安全的map
         * 他是一个segment的数组  segment通过继承ReentrantLock 实现线程安全
         * 保证每个segment线程安全 则全局安全
         */
        ConcurrentHashMap<String, String> concurrentHashMap = new ConcurrentHashMap<>();

        /**
         * hashTable
         * 不建议使用
         * 线程安全 但是性能不如ConCurrentHashMap
         * 线程不安全的情况下 hashMap效率更高
         */

        /**
         * treeMap
         * 可排序的Map
         * 它实现了SortedMap 能够把保存的记录通过key来排序
         * 默认升序
         */

        /**
         * LinkHashMap
         * 他是hash的一个子类
         * 因为hashMap是无序的的 所以需要LinkedHashMap
         * LinkedHashMap = hashMap + 双向链表
         */
        LinkedHashMap<String,String> linkHashMap = new LinkedHashMap<>();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值