面试之Java基础问题(1)

本文介绍一些和List、Set、Map面试常问问题。
在 Java 中除了以 Map 结尾的类之外, 其他类都实现了 Collection 接口。并且以 Map 结尾的类都实现了 Map 接口。
注意:文中提到的线程安全,并发,Sychronized等知识点,如果不太清楚,作者会在后面的Java并发面试题中会有所整理和解释。

问题1:List和Set和Map的区别?

  • List可以有重复的对象,Set不可以有重复的对象;
  • List元素是有序的,Set没法保证有序;
  • List可以插入多个null值,Set只能插入一个;
  • Map,key-value的键值对,entry对象形式,key是无序,不可重复的;value是无序,可重复的;

问题2:List和Set和Map的实现方式分别由哪些?

  • List的实现方式:数据结构
    1)ArrayList : Object[]数组
    2)Vector: Object[]数组
    3)LinkedList: 双向链表
  • Set的实现方式:数据结构
    1)HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素
    2)LinkedHashSet:LinkedHashSet 是 HashSet 的子类,并且其内部是通过 LinkedHashMap 来实现的。
    3)TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树)
  • Map的实现方式:数据结构
    1)HashMap: JDK1.8 之前 HashMap 由数组+链表组成的。JDK1.8 以后,将链表转化为红黑树
    2)LinkedHashMap: LinkedHashMap 继承自 HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成
    3)Hashtable: 数组+链表组成的
    4)TreeMap: 红黑树

问题3:ArrayList 和 Vector 和 LinkedList 的区别?

  • 线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全;Vector是线程安全的;
  • 底层数据结构: Arraylist 和Vector 底层使用的是 Object 数组;LinkedList 底层使用的是 双向链表;
  • 插入和删除: ArrayList 采用数组存储,所以插入和删除元素的时间复杂度受元素位置的影响;LinkedList 采用链表存储,所以对于add(E e)方法的插入,删除元素时间复杂度不受元素位置的影响;
  • 支持快速随机访问: LinkedList 不支持高效的随机元素访问,而 ArrayList 支持。
  • 内存空间: LinkedList 比ArrayList的空间花费更多的空间(因为要存放直接后继和直接前驱以及数据)。

问题4:HashSet 和 LinkedHashSet 和 TreeSet 的区别?

  • HashSet 是 Set 接口的主要实现类 ,HashSet 的底层是 HashMap,线程不安全的,可以存储 null 值;
  • LinkedHashSet 是 HashSet 的子类,能够按照添加的顺序遍历;
  • TreeSet 底层使用红黑树,能够按照添加元素的顺序进行遍历,排序的方式有自然排序和定制排序。

问题5:HashMap 和 HashTable 的区别?

  • 线程安全: HashMap 是非线程安全的,HashTable 是线程安全的。因为 HashTable 内部的方法基本都经过synchronized 修饰。
  • 效率: 因为线程安全的问题,HashMap 要比 HashTable 效率高。另外,HashTable 基本被淘汰,不要在代码中使用它;
  • key / value 为 null : HashMap 可以存储 null 的 key 和 value,但 null 作为键只能有一个,null 作为值可以有多个;HashTable 不允许有 null 键和 null 值,否则会抛出 NullPointerException。
  • 初始容量和扩容:1)创建时如果不指定容量初始值,Hashtable 默认的初始大小为 11,之后每次扩充,容量变为原来的 2n+1。HashMap 默认的初始化大小为 16。之后每次扩充,容量变为原来的 2 倍。2)创建时如果给定了容量初始值,那么 Hashtable 会直接使用你给定的大小,而 HashMap 会将其扩充为 2 的幂次方大小。
  • 底层数据结构: JDK1.8 以后的 HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树,以减少搜索时间。

从以上几个问题可以总结出,当问到这些集合之间的区别的时候,一般要答这几点:线程安全、底层数据结构、有序无序、可否存null值、效率等。

问题6:如何选择该使用哪些集合?

  1. 当要保存一组同类型数据时,首先想到的容器可能就时数组,但用数组存储对象存在弊端, 因为我们在实际开发中,存储的数据的类型是多种多样的,“集合”的出现就使得数据存储更加灵活,集合同样也是用来存储多个数据的
  2. 数组的缺点是声明时要初始化大小;声明数组时的数据类型也决定了该数组存储的数据的类型;而且,数组存储的数据是有序的、可重复的,特点单一。 集合灵活性更高,Java 中集合可用来存储不同类型不同数量的对象,也可保存具有映射关系的数据。

1)根据集合的特点来选,如我们需要根据键值获取到元素值时就选用 Map 接口下的集合,需要排序时选择 TreeMap,不需要排序时就选择HashMap,需要保证线程安全就选用 ConcurrentHashMap
2)只需要存放元素值时,就选择实现Collection 接口的集合,需要保证元素唯一时选择实现 Set 接口的集合比如 TreeSetHashSet,不需要就选择实现 List 接口的比如 ArrayListLinkedList,然后再根据实现这些接口的集合的特点来选用。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352