JAVA集合map、list、set详解
来源:互联网 发布:centos 6.5 64位 编辑:程序博客网 时间:2024/06/07 10:36
- Map中常用的5个集合
- HashMap
- LinkedHashMap
- HashTable
- ConcurrentHashMap
- TreeMap
- List中常用的3个集合
- ArrayList
- LinkedList
- Vector
- Set中常用的4个集合
- HashSet
- LinkedHashSet
- TreeSet
- CopyOnWriteArraySet
- 使用总结
- 线程安全
- 效率高
- 有顺序
Map中常用的5个集合
HashMap
HashMap是非线程安全的(无序的),K和V都可以为null,由于非线程安全所以效率会比较高。HashMap是HashTable的轻量级非线程安全的实现。
LinkedHashMap
LinkedHashMap继承HashMap,但是可以根据插入的顺序取出(当内部属性accessOrder=true是,在此基础上还可以根据最近访问的元素排序)。LinkedHashMap的K和V都可以为null,效率低于HashMap。
HashTable
HashTable是线程安全的(无序的),K和V都不可以为空,之所以线程安全是因为在操作内部属性的方法上都加了synchronized关键字。
ConcurrentHashMap
ConcurrentHashMap是线程安全的(无序的),K和V都不可以为空,ConcurrentHashMap是在操作内部属性的方法内部加了synchronized块相对比HashTable效率会更快一点。
TreeMap
TreeMap是非线程安全的,一个有序的集合,根据K进行排序。K和V都不可以为空,TreeMap是内部是二叉树的形式,由于插入和取出都要遍历树,所以读取和添加元素效率都比较低。
List中常用的3个集合
ArrayList
ArrayList是非线程安全的,按照插入顺序排序。内部是一个object数组,长度默认是10,如果超过当前长度,会new一个长度为之前1.5倍的object数组,然后将之前数据复制过来。当删除元素时也是使用复制的方式,例:删除元素下标为5,共有10个元素,那么就将下标为6-9的元素复制到5-8的位置,再将下标为9的元素置为空。ArrayList特点是读取速度快,删除和插入速度慢(取决于要元素位置,及数组长度)。
LinkedList
LinkedList是非线程安全的,默认是按插入顺序排序(比如都使用add函数插入)。内部使用Node对象链表。LinkedList特点是插入删除速度快(对比ArrayList,ArrayList需要复制数组),但是查询很慢,因为每次查询都是从头或是从尾遍历查找。
Vector
Vector是线程安全的,内部结构与排序与ArrayList一样。Vector的自动扩容与ArrayList不一样,没有默认长度。从0开始每次扩容是新增一个原来长度2倍object数组,然后复制。Vector还可以通过设定capacityIncrement的值,然后每次扩容固定的长度为capacityIncrement。Vector在操作内部属性的方法上都加了synchronized关键字。
Set中常用的4个集合
HashSet
HashSet是非线程安全的,是基于HashMap的。使用的HashMap的K,V=new Object()。
LinkedHashSet
LinkedHashSet是非线程安全的,继承HashSet,内部是操作的LinkedHashMap。
TreeSet
TreeSet是非线程安全的,是基于TreeMap。
CopyOnWriteArraySet
CopyOnWriteArraySet是线程安全的,是基于CopyOnWriteArrayList的。CopyOnWriteArrayList每添加一个元素,就要new一个长度为原来+1的object数组,然后进行复制操作。CopyOnWriteArrayList在进入操作元素的方法后先加了锁,离开前再解锁,所以是线程安全的。
使用总结
线程安全
HashTable、ConcurrentHashMap、Vector、CopyOnWriteArraySet。
效率高
Map有HashMapList有ArrayList(查询速度快)、LinkedList(写入速度快)Set有HashSet
有顺序
Map有LinkedHashMap(默认按插入顺序)、TreeMap(按照K的大小排序)List有ArrayList(数组的下标)LinkedList(默认是插入顺序,也可从头部或尾部或中间插入)Set有LinkedHashSet(默认按插入顺序)、TreeSet(按照大小排序)、CopyOnWriteArraySet(数组的下标)
- Java集合类详解 set、list、map、
- JAVA集合map、list、set详解
- java集合 set list map
- [java]集合 list set map
- java集合 list set map
- java集合set,list、map
- Java list-set-map集合
- java集合(list,set,map)
- java 集合 List Map Set
- java集合类 collection set list map详解
- Java集合Collection、List、Set、Map使用详解
- java集合框架——详解List、Set、Map
- Java集合类: Set、List、Map、Queue使用方法详解
- Java集合(list,Set,Map)集合
- JAVA集合的认识[Set,List,Map]
- Java集合List,Set,Map基础
- java集合map,set,list区别
- java集合map,set,list区别
- form表单数据 转json 对象最佳示例
- 在分析向此请求提供服务所需资源时出错。请检查下列特定分析错误详细信息并适当地修改源文件。
- Sqlserver 每天数据备份语句
- 使用Java代码实现实时消费kafka的消息
- 迅雷“去中心化”再升级 转型中All in 区块链
- JAVA集合map、list、set详解
- Oracle 修改数据库提交之后进行回滚
- 织梦CMS专题节点列表实现分页的方法
- hql查询,投影,动态,条件(参数,位置,名字)
- 深度丨Google告诉你为什么各大机构都在争相研究AI芯片
- JDK下载安装与配置详细教程
- eclipse启动调试时,报错unable to install breakpoint in......
- oracle %type %rowtype
- orcale为工程创建数据库空间