您的位置 首页 java

java面试题整理《集合篇》一

java 集合

集合就是一个可变长度的用来存放数据的容器,准确的说是存放数据对象引用的容器,集合类存放的都是对象的引用,而不是对象的本身(不能存储基本数据类型)。集合类存放于 Java.util 包中,主要有 3 种:set、list和 map。

1. Collection :Collection 是集合 List、Set、Queue 的最基本的接口。

2. Iterator 迭代 器,可以通过 迭代器 遍历集合中的数据

3. Map:是映射表的基础接口

集合和数组的区别

数组是固定长度的;集合可变长度的。

数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。

数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。

Collection 和 Collections 有什么区别?

Collection是最基本的集合接口,Collection派生了两个子接口list和set,分别定义了两种不同的存储方式。

Collections是一个包装类,它包含各种有关集合操作的 静态方法 (对集合的搜索、排序、线程安全化等),此类不能实例化,就像一个工具类,服务于Collection框架。

List、Set与Map三者的区别?

List : 存储的元素是有序的(按对象的顺序保存对象)、可重复的,允许多个Null元素对象,每个元素都有索引。

Set: 存储的元素是⽆序的、不可重复的,最多允许一个Null元素对象,只能通过迭代器或 foreach 的方式进行遍历。

Map:以键值对(kye-value)的方式存储元素,Key 是⽆序的、不可重复的,value 是⽆序的、可重复的,每个键最多映射到⼀个值。Map没有继承于Collection接口,从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。

List集合

Arraylist : 基于动态的 Object[] 数组实现的,连序内存存储,适合下标访问(随机访问),适⽤于频繁的查找⼯作,数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中。当从 ArrayList 的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。

Vector 基于动态的Object[] 数组,支持线程的同步,即某一时刻只有一个 线程 能够写 Vector,避免 多线程 同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问 ArrayList 慢

LinkedList : 双向链表( JDK 1.6 之前为循环链表,JDK1.7 取消了循环),适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了 List 接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。

Set集合

HashSet (⽆序,唯⼀): HashSet 底层就是基于 HashMap 实现的,HashSet的值存放于HashMap的key上,HashMap的value统一为present。因此 HashSet 的实现比较简单,除了 clone() 、 writeObject() 、 readObject() 是 HashSet⾃⼰不得不实现之外,其他⽅法都是直接调⽤ HashMap 中的⽅法。

LinkedHashSet : LinkedHashSet 是 HashSet 的⼦类,并且其内部是通过 LinkedHashMap 来实现的。有点类似于我们之前说的 LinkedHashMap 其内部是基于 HashMap 实现⼀样,不过还是有⼀点点区别的。

TreeSet (有序,唯⼀): 红黑树 (自平衡的排序二叉树) 基于 二叉树 的原理对新 add()的对象按照指定的顺序排序(升序、降序),每增加一个对象都会进行排序,将对象插入的二叉树指定的位置。(可以对 Integer String 对象都进行默认的排序,而自定义类的对象是不可以的,须实现 Comparable 接口,并且覆写相应的 compareTo()函数)

Map集合

HashMap : JDK1.8 之前 HashMap 由数组+ 链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的。JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表⻓度⼤于 阈值 (默认为 8)(将链表转换成红⿊树前会判断,如果当前数组的⻓度⼩于 64,那么会选择先进⾏数组扩容,⽽不是转换为红⿊树)时,将链表转化为红⿊树,以减少搜索时间

LinkedHashMap : LinkedHashMap 继承⾃ HashMap ,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红⿊树组成。另外, LinkedHashMap 在上⾯结构的基础上,增加了⼀条双向链表,使得上⾯的结构可以保持键值对的插⼊顺序。同时通过对链表进⾏相应的操作,实现了访问顺序相关逻辑。

Hashtable 数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突⽽存在的

TreeMap : 红⿊树(⾃平衡的排序⼆叉树)

文章来源:智云一二三科技

文章标题:java面试题整理《集合篇》一

文章地址:https://www.zhihuclub.com/190435.shtml

关于作者: 智云科技

热门文章

发表回复

您的电子邮箱地址不会被公开。

网站地图