Java中List,Set,Map区别
在Java开发面试中,面试官最常问到的就是Java集合,免不了要让面试者说出之间的区别,下面博主就对其做了总结。
1、集合与数组的区别
- 长度区别:数组是固定长度,集合长度可变;
- 内容区别:数组可以是基本类型,也可以是引用类型;集合只能是引用类型;
- 元素内容:数组只能存储同一种类型;集合可以存储不同类型;
2、List接口,Set接口是Collection接口的子接口
List一共有三个实现类:ArrayList,Vector,LinkedList
ArrayList 和 LinkedList,Vector (数组实现,线程同步)都是继承了AbstractList类,实现了List接口的容器类,用于存储一系列的对象引用。
List有序,可重复
| ArrayList | LinkedList | Vector | |
|---|---|---|---|
| 底层结构 | 动态有序数组 | 双向循环链表 | 有序数组 |
| 操作速度 | 查询快,增删慢,效率高 | 查询慢,增删快,效率高 | 查询快,增删慢,效率低 |
| 线程是否安全 | 线程不安全 | 线程不安全 | 线程安全,效率低 |
| 容量不足时 | 当前容量*1.5+1 | 默认扩展一倍容量 | |
| 是否可重复 | 排列有序,可重复 | 排列有序,可重复 | 排列有序,可重复 |
| 使用场景 | 查询多,插入、删除较少 | 查询少,插入、删除较多 |
3、HashSet(Hash表)和TreeSet继承了AbstractSet类,实现了Set接口,LinkedHashSet继承了HashSet类,实现了Set接口
Set无序,唯一
| HashSet | TreeSet | LinkedHashSet | |
|---|---|---|---|
| 底层原理结构 | Hash表(无序,唯一) | 红黑树(有序,唯一) | 链表和哈希表 (FIFO插入有序,唯一) |
| 保证元素唯一性的方法 | 依赖两个方法:hashCode(), equals() | 自然排序,比较排序(有序) 根据比较返回值是否是0(唯一) | 链表保证元素有序 哈希表保证元素唯一 |
| 存取速度 | 快 | 排序存储 | Hash表存储,并用双向链表记录插入顺序 |
| 是否可重复 | 排列无序,不可重复 | 排列有序,不可重复 | |
| 内部结构 | HashMap | TreeMap,SortedSet | LinkedHashMap |
HashSet存储元素的顺序是按照哈希值来存的,也是按照哈希值取得,元素的哈希值是通过元素的hashcode方法来获取,HashSet首先判断两个元素的哈希值,如果哈希值一样,接着会比较equals方法,如果equals结果为true,HashSet就视为同一个元素,否则不是同一个元素。
4、TreeMap和HashMap继承了AbstractMap类,实现了Map接口,HashTable实现了Map接口,TreeMap实现了SortedMap接口
| HashMap | TreeMap | HashTable | |
|---|---|---|---|
| 是否有序 | 无序 | 有序 | 无序 |
| (K,V)是否可重复 | K不可重复,V可重复 | K不可重复,V可重复 | K不可重复,V可重复 |
| 底层原理 | 哈希表 | 红黑树 | 哈希表 |
| 线程是否安全 | 不安全 | 不安全 | 安全 |
| (K,V)是否可允许为空 | K允许,V允许 | K不允许,V不允许 | |
| 方法是否同步 | 方法不同步 | 方法同步 |
Java中List,Set,Map区别的更多相关文章
- Java中的映射Map - 入门篇
前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的映射Map - 入门篇>,希望对大家有帮助,谢谢 简介 前面介绍了集合List,这里开始简单介绍下映射Map,相关类如下图所示 正 ...
- Java中如何遍历Map对象的4种方法
在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHa ...
- java中ArrayList 、LinkList区别
转自:http://blog.csdn.net/wuchuanpingstone/article/details/6678653 个人建议:以下这篇文章,是从例子说明的方式,解释ArrayList.L ...
- 转!! Java中如何遍历Map对象的4种方法
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...
- 【转】Java中如何遍历Map对
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...
- java 中 ==和equals 的区别
Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolea ...
- java中equals和==的区别 (转)
java中equals和==的区别 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...
- 【转】Java中equals和==的区别
[转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boole ...
- 【转】Java中如何遍历Map对象的4种方法
原文网址:http://blog.csdn.net/tjcyjd/article/details/11111401 在Java中如何遍历Map对象 How to Iterate Over a Map ...
- java中a++与++a区别
java中a++与++a区别 a++与++a的区别,如果单独使用没有任何区别,如果在运算中就有区别了,a++是先运算在赋值,而++a是先赋值在运算!! 先看a++的代码哦 class demo1 { ...
随机推荐
- 【C语言C++编程学习笔记】基础语法,第一个简单的实例编程入门教程!
C语言/C++编程学习:一个简单的实例 让我们来看一个简单的C语言程序.从下面的程序可以看出编写C语言程序的一些基本特征. 如果你能知道该程序将会在显示器上显示一些内容,那说明你还是知道一些的! ...
- C# 8: 默认接口方法
翻译自 John Demetriou 2018年8月4日 的文章 <C# 8: Default Interface Methods>[1],补充了一些内容 C# 8 之前 今天我们来聊一聊 ...
- 国产化即时通信系统开发 -- 实现GGTalk的登录界面(Linux、Ubuntu、UOS、中标麒麟)
距离2013年开源GGTalk以来,7年已经过去了,GGTalk现在有了完整的PC版.安卓版.iOS版(即将发布),以及Xamarin版本. 然而,时代一直在变化,在今天,有个趋势越来越明显,那就是政 ...
- stm32与红外遥控器(NEC协议)
1.器件简介 本次测试采用R903V1红外接收头与NEC协议的红外遥控器,接收头原理图如下: 器件的供电电压VCC在2.7V~5.5V之间,输出电压VOUT正常在0.2v ~(VCC-0.3±0.2) ...
- cao 啥时候能系统地复习一下数据结构 我光学数学去了
最近有功夫的话再敲敲数据结构复习复习
- 利用数据库拿shell的一些姿势
0x01.利用MySQL命令导出getshell 利用条件: 1.拥有网站的写入权限 2.Secure_file_priv参数为空或者为指定路径 3.知道网站的绝对路径 方法: 通过into outf ...
- jq animate 的第二写法
俩个参数的写法 例子: $('#div1').animate({num:'auto'},{ duration : 1000, //运动时间 easing : 'linear', //运动形式 ...
- B. Psychos in a Line 解析(思維、單調棧)
Codeforce 319 B. Psychos in a Line 解析(思維.單調棧) 今天我們來看看CF319B 題目連結 題目 給一個數列,如果相鄰兩數,左邊大於右邊,那麼就可以殺死右邊的數字 ...
- svnsync笔记
svnsync从库配置 1.创建空的从库 root@test: /svn # svnadmin create test 2.从库用户配置 修改authz : [groups] sync = sync ...
- JQuery如何实现统计图表
EEP JQuery如何实现统计图表 讯光科技 前言 在ERP项目开发过程中,统计图表(chart)普遍应用于各种统计和报表中,其形象直观,内容清晰.EEP的JQuery网站项目使用了Easyui 插 ...