栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【基础】集合之我见

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【基础】集合之我见

***Collection是最基本的接口 下面有继承的接口list map set ***

List 接口有实现类 arraylist 基于数组的有序可重复实现类 因为是数组 出了名的增删慢,(最早之前是10,后来变成了0,当我们在首次添加元素,需要分配数组空间时,jdk自动帮我们进行了扩容操作,将初始数组长度扩容成了10。这样做有效地降低了无用内存的占用!)但是随机访问元素是很快的,同时因为没有做多线程处理他也是线程不安全,如果对线程安全有要求可以用vetor 当数组大小不满足时需要增加存储能力,就要将已经有数
组的数据复制到新的存储空间中。当从 ArrayList 的中间位置插入或者删除元素时,需要对数组进
行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除

vetor为什么是线程安全的呢 原因是加了synchronized,其他和arraylist一样但是效率低 它支持线程的同步,即某一时刻只有一
个线程能够写 Vector

基于双向链表的list 双向链表的特性就是有地址节点 可以指向上一跳下一跳 所以增删比较快 但是查找速度慢,也是线程不安全 ,业务场景偏向于增删可以考虑使用

Map hashmap key不能重复 可以是null 值可以重复可以是null, 底层是哈希表,说到hash表就要说到hash码 线程不安全 数据结构是数组+链表+红黑树 可以扩容,扩容后数组大小为当前的 2 倍

ConcurrentHashMap 和 HashMap 思路是差不多的,但是因为它支持并发操作,所以要复杂一
些。

*** hashtable key不能重复 值可以重复, 底层是哈希表,说到hash表就要说到hash码 线程安全 并发性不如 ConcurrentHashMap***

***Set hashSet 底层是hashmap 无序不可重复 存取速度快 哈希表边存放的是哈希值。HashSet 存储元素的顺序并不是按照存入时的顺序(和 List 显然不
同) 而是按照哈希值来存的所以取数据也是按照哈希值取得。元素的哈希值是通过元素的
hashcode 方法来获取的, HashSet 首先判断两个元素的哈希值,如果哈希值一样,接着会比较
equals 方法 如果 equls 结果为 true ,HashSet 就视为同一个元素。如果 equals 为 false 就不是
同一个元素。 ***

***Set linkedhashset 底层是linkedhashmap 无序不可重复 存取速度快 它继承与 HashSet、又基于 linkedHashMap 来实现的 ***

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/778423.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号