在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区别的更多相关文章

  1. Java中的映射Map - 入门篇

    前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的映射Map - 入门篇>,希望对大家有帮助,谢谢 简介 前面介绍了集合List,这里开始简单介绍下映射Map,相关类如下图所示 正 ...

  2. Java中如何遍历Map对象的4种方法

    在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHa ...

  3. java中ArrayList 、LinkList区别

    转自:http://blog.csdn.net/wuchuanpingstone/article/details/6678653 个人建议:以下这篇文章,是从例子说明的方式,解释ArrayList.L ...

  4. 转!! Java中如何遍历Map对象的4种方法

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  5. 【转】Java中如何遍历Map对

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  6. java 中 ==和equals 的区别

      Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolea ...

  7. java中equals和==的区别 (转)

    java中equals和==的区别  值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...

  8. 【转】Java中equals和==的区别

    [转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boole ...

  9. 【转】Java中如何遍历Map对象的4种方法

    原文网址:http://blog.csdn.net/tjcyjd/article/details/11111401 在Java中如何遍历Map对象 How to Iterate Over a Map ...

  10. java中a++与++a区别

    java中a++与++a区别 a++与++a的区别,如果单独使用没有任何区别,如果在运算中就有区别了,a++是先运算在赋值,而++a是先赋值在运算!! 先看a++的代码哦 class demo1 { ...

随机推荐

  1. 洛谷 CF1012C Hills(动态规划)

    题目大意: 有几座山,如果一座山左右两边的山比它矮,那么可以在这个山上建房子,你有一台挖掘机,每天可以挖一座山一米,问你需要花多少代价可以分别盖1.2.3--座房子.(给出山的数量,以及每座山的高度) ...

  2. Go语言基础知识01-用Go打个招呼

    每一种编程语言,从读一本好书开始 每一种编程语言,也从Helloworld开始 1. 环境准备 1.1 安装golang 在Ubuntu下,直接输入命令可以安装最新版本: $ sudo apt-get ...

  3. PHP-FPM包的安装与配置 转

    实验环境:CentOS7 [root@~ localhost]#yum -y install php-fpm php-fpm包:用于将php运行于fpm模式 #在安装php-fpm时,一般同时安装如下 ...

  4. Centos定时备份 MySQL数据库

    一.编写数据库备份脚本 backupmysql.sh #!/bin/bash # Name:bakmysql.sh # This is a ShellScript For Auto DB Backup ...

  5. Windows(WSL2) Linux子系统搭建Docker环境

    摘要:本文主要介绍了如何再Windows(WSL2)中启用Linux系统中,并搭建Docker环境. WSL是适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux ...

  6. 【Vue.js】简单说下vuejs中v-model自定义使用姿势

    vue.js中有个v-model的语法,可以实现双向绑定. 起初刚看到的时候,觉得很神奇.后面随着对vue.js的熟悉.发现这个其实是vue官方给我们实现的一个语法糖. 使用v-model的时候,vu ...

  7. mysql 改变表结构 alter

    总结:alter添加栏位时,只需记住添加新栏位为第一列,用first;添加其他用,after 前一个栏位字段,如下例 1.需求:将新的栏位添加为第二列 添加前: 添加后: 参考:http://www. ...

  8. 微服务从nacos配置中心获得配置信息

    一,安装nacos, 略 二,创建父工程和微服务工程 service1, service2,以idea为例 1, new -> project -> Maven -> 填写group ...

  9. 女朋友看了我的博客,说太LOW了,于是我搞了一天~

    持续原创输出,点击上方蓝字关注我 原创博客+1,点击左下角阅读原文进入 目录 前言 如何下载? 配置文件的分类 基本信息配置 修改主题 Next主题样式设置 添加动态背景 修改链接的样式 添加文章搜索 ...

  10. ArrayBlockingQuque摘要

    ArrayBlockingQuque 优势 线程同步,线程安全 对应空或满时,take\put操作将阻塞 内部是一个数组,每个元素不会产生额外的处理对象,如Node 基于什么 ReentrantLoc ...