在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不允许
方法是否同步 方法不同步 方法同步

最新文章

  1. 面向对象(Object-Oriented)
  2. Android Native 代码NDK开发学习笔记
  3. 修改apache的默认访问目录
  4. 【转载】jQuery插件开发精品教程,让你的jQuery提升一个台阶
  5. Form_通过Trace分析Concurrent和Form性能和异常详解(案例)
  6. nodejs compressor
  7. poj3294
  8. Java 自带MD5加密 Demo
  9. CCI_chapter 8 Recurision
  10. bzoj 3224: Tyvj 1728 普通平衡树 替罪羊树
  11. 【Java GUI】Java GUI基金会
  12. Jdk1.6 JUC源码解析(12)-ArrayBlockingQueue
  13. KOA中间件的基本运作原理
  14. linux space/mark设置
  15. php CLI SAPI 内置Web Server
  16. Win10系列:UWP界面布局进阶3
  17. 开机自启动Nginx的脚本
  18. ruby的sort方法的重新认识
  19. [转] NGUI自适应
  20. 数据库实例: STOREBOOK > 用户

热门文章

  1. v-model数据绑定分析
  2. 【Luogu】P1613 跑路
  3. Golang 随机生成中国人姓名
  4. Python之dict字典详解
  5. CPU 底层运算之乘法运算
  6. CUDA和cuDNN的安装
  7. 常用物联网应用层协议(1)——先说HTTP协议
  8. Shell脚本实现----Kubernetes单集群二进制部署
  9. BadBoy+JMeter应用过程中遇到的问题汇总
  10. ASP.NET Core Authentication系列(二)实现认证、登录和注销