java有8种之多,但是不用害怕事实上常用的数据结构也就那么几种,
常用的也就是哈希表,向量,Properties,集合框架,栈(关于数据结构,我写的不是很细,因为最近小编在准备求职,等小编有空会准备详细代码来进行讲解)
- 栈 在面试中栈经常与队列一起出题。
- 栈/队列 线性存储结构。栈先进后出,队列,先进先出。
- 栈:只能在入栈出栈口(同一口)进行操作
- 队列:只能在表的一端进行插入和在另一端进行删除操作(即在入队 口插入,出队口删除)!!!!
- 用途:
栈:可以颠倒数据串的次序、为回溯算法提供支持、实现自动机
队列:共享打印机,消息队列
二、常用类的区别
1.ArrayList: 元素单个,效率高,多用于查询
2.Vector: 元素单个,线程安全,多用于查询
3.LinkedList:元素单个,多用于插入和删除
4.HashMap: 元素成对,元素可为空
5.HashTable: 元素成对,线程安全,元素不可为空 一、几个常用类的区别
1.ArrayList: 元素单个,效率高,多用于查询
2.Vector: 元素单个,线程安全,多用于查询
3.LinkedList:元素单个,多用于插入和删除
4.HashMap: 元素成对,元素可为空
5.HashTable: 元素成对,线程安全,元素不可为空
二、这样讲过于笼统我们来分析分析面试经常问的这些个数据结构细节讲解
1.ArrayList 源码分析(阿里面试)
最重要的也就是 ArrayList的初始容量为10,一次增幅1.5
详情请见链接:
https://blog.csdn.net/panweiwei1994/article/details/76760238
2. Vector和ArrayList的区别:
(1)Vector方法同步,意味着线程安全;而ArrayList线程不同步,意味着线程不安全。 显而易见,ArrayList效率性能方面比较高。
(2)Vector和ArrayList两者初始容量都是10,但是增幅不同。
Vector翻倍,ArrayList为1.5.
3.HashMap和HashTable的区别*:
(1)首先知道HashMap的都知道,效率高,所以线程不同步
HashTable刚好相反。
(2)从继承体系来看 HashMap继承自AbstractMap类,
HashTable继承自Dictionary类
- ArrayList与LinkedList的区别
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
简单来说也就是,
ArrayList基于动态数组,LinedList基于链表。
随机查询修改前者,正常删除,添加用链表。
4.数组和ArrayList区别 阿里问过
这个问题很简单,两者最大的区别的就是:
数组长度固定,ArrayList长度可变,但数组更加高效,
这样的原因是有很有意思:
正是因为ArrayList可以扩容,他每次扩容前都会
每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,用来确定是否容量不够,如果不够,以当前容量的1.5倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,相当影响效率的呀。
所以一般使用数组,无法确定数组大小时才使用ArrayList!
下一篇就着重介绍HashMap源码了
HashMap源码阿里面试必备一定会问!!!