java数据结构

tip : 常用的数据结构有八种:数组(Array),栈(Stack),链表(Linked List),图(Graph),队列(Queue),树(Tree),堆(Heap),散列表(Hash)

List 有序,可重复

ArrayList

内部是使用动态数组来实现的,对于数据的随机get和set或是少量数据的插入或删除,查询效率会比较高。
ArrayList是线程不安全的,在不考虑线程安全的情况下速度也比较快的。ArrayList插入数据可以重复,
也是有序的,按照插入的顺序来排序。
底层数据结构数组,查询快,增删慢,线程不安全,效率高复制代码

LinkedList

内部是使用链表的形式来实现的,在插入大量数据的时候效率比较快。 
底层数据结构是链表,查询慢,增删快,线程不安全,效率高
复制代码

Vector

Vector的使用方法和内部实现基本和ArrayList相同,只不过它在add(), remove(), get()等方法中都加了同步。
所以它是线程安全的。但是使用效率上就不如ArrayList了
底层数据结构是数组,查询快,增删慢,线程安全,效率低复制代码

set 无序,唯一

HashSet

哈希码算法,加入的对象需要实现hashcode()方法,快速查找元素
哈希表依赖两个方法:hashCode()和equals()

首先判断hashCode()值是否相同是:继续执行equals(),看其返回值是true:说明元素重复,不添加是false:就直接添加到集合否:就直接添加到集合最终:自动生成hashCode()和equals()复制代码

TreeSet

底层数据结构是红黑树。(是一种自平衡的二叉树),按序存放,想要有序就要实现Comparable接口复制代码

LinkedHashSet

底层数据结构由链表和哈希表组成由链表保证元素有序由哈希表保证元素唯一复制代码

Map

HashMap

HashMap是基于散列链表来实现的,哈希码算法,快速查找键值,简单的来说,根据key算出一个hash值,确定一个存放index,
但是hash值有可能会冲突重复,所以如果冲突的hash值就需要以链表的形式在同一个index存放了
http://blog.csdn.net/u011060103/article/details/51355763
复制代码

Hashtable

Hashtable是线程安全的,用synchronized关键字来保证线程安全的,由于synchronized的机制是在
同一时刻只能有一个线程操作致使效率低,其他内部实现,与HashMap都是一样的。HashMap和TreeMap都是线程
不安全的,多线程操作的时候可能会造成数据错误。复制代码

TreeMap

内部实现是根据红黑树来实现的。红黑树是一种平衡有序的二叉树,TreeMap的插入删除查询都是依据红黑树的
规则来进行的,使用大致跟HashMap类似 ,对键按序存放。 http://blog.csdn.net/chenssy/article/details/26668941复制代码

ConcurrentHashMap 并发类型

使用的分段锁技术,ConcurrentHashMap容器的数据分段存储,每一段数据分配一个Segment(锁),当线程占用
其中一个Segment时,其他线程可正常访问其他段数据。
ConcurrentHashMap由Segment和HashEntry组成。
Segment是可重入锁,它在ConcurrentHashMap中扮演分离锁的角色;
HashEntry主要存储键值对;
CurrentHashMap包含一个Segment数组,每个Segment包含一个HashEntry数组并且守护它,
当修改HashEntry数组数据时,需要先获取它对应的Segment锁;而HashEntry数组采用开链法处理冲突,
所以它的每个HashEntry元素又是链表结构的元素
复制代码

数组和链表的区别

数组静态分配内存,链表动态分配内存;
数组在内存中连续,链表不连续; 
数组元素在栈区,链表元素在堆区; 复制代码

堆栈空间分配

栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

堆栈缓存方式

栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。

堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

关于堆和栈区别的比喻

堆和栈的区别可以引用一位前辈的比喻来看出:

使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。

使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。比喻很形象


转载于:https://juejin.im/post/5cf5d223f265da1b7c610446

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通;、本 3项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看ReadmE.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、资 1源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READMe.m文件(如d有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值