java集合list和set
来源:互联网 发布:阿里云客服怎么工作 编辑:程序博客网 时间:2024/06/07 20:55
集合
Java中集合有一个接口,collection是集合的父接口,它的上层还有一个接口iterate迭代器,
下面有两个实现,
list和set,
list下面有三个实现
arraylist:
(1)jdk1.2有的,1.5加的泛型
(2)底层数据结构是object数组
(3)New ArrayList()jdk1.6及以下默认容量是10,1.7默认容量是0,
(4)扩容的话 当前容量*3/2+1,没有扩容增量
(5)线程不安全
Linkedlist:
(1)容量无限制
(2)底层是基于双向循环 链表结构,
(3)双向指的是entry有两个属性:next和previous,和hashmap不同, hashmap是单向
(4)循环指的是,任何一个节点都指向的是上一个和下一个
(5)底层是一个entry,entry里面有三个属性:element,previous,next,
(6)对于任意节点来说,previous指向的是上一节点,next指向下一节点,而对于最后一个节点来说,previous指向的是上一个节点,next指的是头,
(7)线程不安全
vector :
(1)jdk1.0就有,
(2)底层数据结构是object数组
(3)通过syncnized来保证线程安全的,
(4)默认容量10,扩容是当前容量*2,也可以指定当前扩容增量,new Vector()的时候有两个参数,(容量大小,扩容增量)
性能:
对于查询—基于数组的ArrayList和vector快
对于新增(默认新增到末尾)—ArrayList快,linkedlist得定位到末尾才能新增
对于删除—删除末尾(删除默认),ArrayList快
删除中间时分情况,
在接近头部时,因为ArrayList索引要移动,linkedlist不需要移动,linkedlist快
接近尾部时ArrayList快
实际上,删除并不是linkedlist快,而是ArrayList慢
.set
Hashset
是无序不重复,但是要保证无序不重复,这个bean要重写hashcode和equals方法,
Hashset底层是基于hashmap实现的,
Hashmap
里面两个对象是同一个对象,依据是通过看源码,重写hashcode和equals方法,
点进去hashmap源码,看put方法,for循环里就是这么实现的
String作为hashmap的key好吗?
好,已经重写过了
Map
下有hashmap和hashtable
Hashmap:
(1)底层基于entry数组,也就是一个哈希桶,它是一个单向列表,
(2)线程不安全
(3)构造方法默认容量是16
(4)容量只能是2的n次方
(5)New一个hashmap容量至少为2
(6)确定下标时用的时位移运算,运算效果比取余高
(7)Key可以为null
(8)hashmap性能高于hashtable
(9)hashmap扩容时会把前面插入的内容再重新散列(插入)一次,
所以性能低;为提高性能,避免扩容,需要指定容量来提高效率
Hashtable:
(1)底层基于entry数组,也就是一个哈希桶,它是一个单向列表,
(2)线程安全
(3)构造方法默认容量是11
(4)容量任意
(5)New一个hashtable容量可以为1
(6)确定下标是取余
(7)Key不可以为null,否则会抛出
(8)Value不可以为null,否则会抛出空指针异常
线程安全且性能高:concurrentHashmap
基于lock来实现,
Segment段,提高性能
- java集合list和set
- Java集合List、Set和Map
- Java集合框架 List和Set
- Java集合List和Set的原理
- Java中的集合(List和Set)
- java 集合 Collection接口 List 和Set
- Java--集合类Collection--List和Set
- Set集合和List集合
- Java内List集合和Set集合的总结
- java集合框架-List和Set和相关的方法
- java集合 set list map
- [java]集合 list set map
- java之List,Set集合
- java集合框架---List/Set
- java集合 list set map
- Java集合(List、Set)
- java集合set,list、map
- Java list-set-map集合
- LINUX
- ConcurrentMap、hashTable与hashMap的区别
- 笔试系列--美图秀秀(2017年秋招) 整数二进制数的不同位数
- 制作Excel表头的6种方式如分项表头 双线复合表头等等
- 前端H5初学笔记(四)
- java集合list和set
- java关键字(详解)
- swagger
- linux挂载磁盘
- Qt中QThread 互斥,事件,临界区,信号量
- IDEA GIT 上传项目
- jdk安装 环境变量配置
- 网络及TCP/IP简明快速基础
- 通谷易懂区块链技术