Java集合 高频面试题(一)

说说 ListSetQueueMap 四者的区别?

  • List(对付顺序的好帮手):存储的元素是有序的、可重复的
  • Set(注重独一无二的性质):存储的元素是无序的、不可重复的
  • Queue(实现排队功能的叫号机):按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的
  • Map(用 key 来搜索的专家):使用键值对(key-value)存储,类似于数学上的函数 y=f(x),"x"代表 key,"y"代表 value,key 无序的、不可重复的,value 无序的、可重复的,每个键最多映射到一个

如何选用集合?

主要根据集合的特点来选用,

比如我们需要根据键值获取到元素值时就选用 Map 接口下的集合

需要排序时选择 TreeMap, 不需要排序时就选择 HashMap,

需要保证线程安全就选用 ConcurrentHashMap

当我们只需要存放元素值时,就选择实现 Collection 接口的集合,

需要保证元素唯一时选择实现 Set 接口的集合比如 TreeSet 或 HashSet,

不需要保证唯一就选择实现 List 接口的比如 ArrayList 或 LinkedList,

然后再根据实现这些接口的集合的特点来选用。

为什么要使用集合?

当我们需要保存一组类型相同的数据的时候,我们应该是用一个容器来保存,这个容器就是数组

但是,使用数组存储对象具有一定的弊端,因为我们在实际开发中,存储的数据的类型是多种多样的,于是,就出现了“集合”,集合同样也是用来存储多个数据的。

数组的缺点是一旦声明之后,长度就不可变了:同时,声明数组时的数据类型也决定了该数组存储的数据的类型:而且,数组存储的数据是有序的、可重复的,特点单一。

但是集合提高了数据存储的灵活性,Java 集合不仅可以用来存储不同类型不同数量的对象,还可以保存具有映射关系的数据。

Arraylist 和 Vector 的区别?

  1. ArrayList 是 List 的主要实现类,底层使用 Object[]存储,适用于频繁的查找工作,线程不安全;
  2. Vector 是 List 的古老实现类,底层使用 Object[]存储,线程安全的。

Arraylist 与 LinkedList 区别?

是否保证线程安全:

ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全;

底层数据结构:

Arraylist 底层使用的是 Object 数组:LinkedList 底层使用的是 双向链表数据结构

插入和删除是否受元素位置的影响:

  • a.ArrayList 采用数组存储,所以插入和删除元素的时间复杂度受元素位置的影响。比如:执行 add(Ee)方法的时候,ArrayList 会默认在将指定的元素追加到此列表的末尾,这种情况时间复杂度就是 1)。但是如果要在指定位置 i 插入和删除元素的话 addlint index.Eelement)时间复杂度就为(n-i),因为在进行上述操作的时候集合中第 i 和第个元素之后的(n-i)个元素都要执行向后位/向前移一位的操作。
  • b.LinkedList 采用链表存储,所以,如果是在头尾插入或者删除元素不受元素位置的影响(add(Ee)、addFirst(Ee)、addLast(Ee)、removeFirst()、removeLast()),近似(1),如果是要在指定位置 i 插入和删除元素的话(add(int index,Eelement) remove(Obiecto))时间复杂度近似为 O(n),因为需要先移动到指定位置再插入。

是否支持快速随机访问:

LinkedList 不支持高效的随机元素访问,而ArrayList 支持

快速随机访问就是通过元素的序号快速获取元素对象(对应于 get(int index)方法)。

内存空间占用:

ArrayList 的空间浪费主要体现在在 list 列表的结尾会预留一定的容量空间

而 LinkedList 的空间花费则体现在它的每一个元素都需要消耗比 ArrayList 更多的空间(因为要存放直接后继和直接前驱以及数据)。

Comparable 和 Comparator 的区别?

comparable 接口实际上是出自 java.lang 包它有一个compareTo(Object obj)方法用来排序

comparator 接口实际上是出自 java.util 包它有一个compare(Object obj1,Object obj2)方法用来排序

一般我们需要对一个集合使用自定义排序时,我们就要重写 compareTo(方法或 compare()方法,当我们需要对某一个集合实现两种排序方式,

比如一个 song 对象中的歌名和歌手名分别采用一种排序方法的话,我们可以重写 compareTo(方法和使用自制的 Comparator 方法或者以两个 Comparator 来实现歌名排序和歌星名排序,第二种代表我们只能使用两个参数版的Collections.sort().

无序性和不可重复性的含义是什么

什么是无序性?

无序性不等于随机性 ,无序性是指存储的数据在底层数组中并非按照数组索引的顺序添加 ,而是根据数据的哈希值决定的。

什么是不可重复性?

不可重复性是指添加的元素按照 equals()判断时 ,返回 false,需要 同时重写 equals()方法和 HashCode()方法

比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同

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

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

推荐阅读更多精彩内容