关于java中集合的数据结构的理解

今天想分享一下关于java中的集合,数据结构一直都是我们绕不开的话题,而且数据结构与算法也是我非常喜欢的一本书,下面我想和大家聊聊java中集合的数据结构。

在java中,集合分为两种,一个是Map接口,另一个就是collection接口,Map接口其实是独立存在的,绝对不是继承自collection接口下面的,collection分为set和list,set无序不可重复,list有序可重复,set分为hashset treeset,hashset又分为linkedhashset,set没啥好说的,但是数据结构的组成还是要说说,hashset底层数据结构是哈希表,linkedhashset底层数据结构是哈希表和链表的组成,链表代表有序性,哈希表表示元素的唯一性,treeset的底层数据结构是红黑树,list分为arrarylist,linkedlist,vactor,arrarylist和vactor的数据结构都是一样的,底层是数组,数组的特点就是查询快,增删慢,因为数据得维护啊,你看看数组的源码就会发现,数组的属性值有四个还是三个,一个数组元素本值,一个指向前面的一个元素,一个指向后面的元素,所以当数组增删的时候数据维护还是比较费劲的,arrarylist是非线程安全的,vactor是线程安全的,linkedlist也是非线程安全的,相较arrarylist而言,linkedlist的底层是链表构成的,链表的特性就是查找困难,增删快,下面还有一个单独的Map接口,Map分为hashMap,treeMap,hashTable,hashTable和hashMap的区别是hashTable是线程安全的,hashMap是非线程安全的,treeMap的底层是红黑树hashtable和hashMap的数据结构是哈希表,hashMap还分出来一个linkedHashMap,底层是链表加hash表。基本上到这数据机构就说完了。

 顺便所说个东西吧,hashMap是非线程安全的,而hashTable之所以线程安全就是加了Synchronized关键字,在高并发的情况下,hashtable直接就变成单线程了,而hashMap也会造成死循环和cpu使用率极高的情况,所以还有一个Map可以改善这种情况,这个Map是就是ConcurrentHashMap,这个Map在jdk7和8中的实现原理是不一样的,7里面使用分段锁的技术去实现线程安全的,而8里面是红黑树加上cas比较替换实现的线程安全,所以大家闲暇时可以多研究一下数据结构这一块

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java集合类可用于存储数量不等的对象,并可以实现常用的数据结构如栈,队列等,Java集合还可以用于保存具有映射关...
    小徐andorid阅读 1,974评论 0 13
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 4,445评论 1 14
  • ArrayList实现原理要点概括 参考文献:http://zhangshixi.iteye.com/blog/6...
    晨光光阅读 1,092评论 0 1
  • 东篱一栀阅读 219评论 0 0
  • 今天读到这样一段,说“什么是成熟?喜欢的东西依旧喜欢,但可以不拥有。害怕的东西依旧害怕,但可以面对。” ...
    楸木行枷阅读 503评论 2 5