Java中的容器

Java中的容器

Java中的有多种常见的数据结构,例如:HashMap,BlockingQueue,然而,这几种数据结构主要继承两个接口collection和map,

容器的分支

1、map
对于map这个接口来说,主要有3个实现,HashMap,HashTable,TreeMap。
HashTable是一种比较“古老的”数据结构了,他里面常用的方法,比如get、put方法,都被synchronized进行修饰,所以他是线程安全的,不过也是因为加锁,所以他的性能不是很高。
HashMap和HashTable正好相反,他的方法没有加锁,所以他就能来说,是比HashTable要高的,但是,由于没有加锁,所以他是线程非安全的。
所以,为了考虑到线程安全这个问题,这就有了synchronizedHashMap,对于他来说,HashTable这种数据结构是将锁加在方法上,而synchronizedHashMap是将锁加在方法中,他是比HashTable效率要高一点的。
HashMap的实现后来还加了一个concurrentHashMap,对于它来说,又是对HashMap的一种性能提升,它放元素时,内部需要进行很多判断,效率并没有提升,但是取元素时,效率就得到很大提升。
TreeMap,内部主要实现是红黑树,实现查找方便
在这里插入图片描述

2、对于collection这个接口来说,他的实现主要分为3个接口,list、set、queue,下面分别从每个接口来讲collection的具体实现

2.1 list接口
list接口的实现主要包括Vector、ArrayList、LinkedList、ConcurrentSkipList、copyOnWriteList这几种
对于Vector来说,他是线程安全的list,自带锁,他也是线程安全的list,其实一个多维数据。ArrayLIst,基于数组的实现,他是有界的,和他相反,LinkedList,基于链表的实现,他是无界的。ConcurrentSkipList,跳表,链表的基础加层级,用cas处理,比TreeMap方便,copyOnWriteList,写实复制,写时加锁,读时不加锁,适用于读多写少的情况。
在这里插入图片描述

2.2 set接口
set接口的实现主要是HashSet、TreeSet、LinkedHashSet这三种。
HashSet主要是存放不重复的元素。TreeSet利用红黑树实现,LinkedHashSet是有序的。
2.3 Queue接口
主要的实现是BlockingQueue,然后BlockingQueue的实现有LinkedBlockingQueue,ArrayBlockingQueue几种,主要的方法有offer、peek、poll、put、take等、
LInkedBlockingQueue,无界队列,一直能存储到内存满。
ArrayBlockingQueue,有界,其中它里面的容量满了之后,用add方法添加就会报错,用put方法添加就会阻塞,用offer方法不会阻塞。
DelayQueue,按照等待时间紧迫程度()进行排序,按照时间进行任务调度
SynchronousQueue,阻塞,等待消费者消费,只有take,才能put,两个线程交换数据,同步queue。
transferqueue,装完等待消费,添加了transfer(),等待被消费。
priorityQueue,内部利用二叉树,可以进行排序,按照大小顺序进行排序

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值