18.java 容器都有哪些?
主要分为Collection和Map两大类
Collection分为3种,分别是List,Set,Queue。
List:ArrayList,LinkedList,Vextor
Set:HashSet,LinkedHashSet,TreeSet
Queue:队列
Map:HashMap,TreeSet,HashTable
19.Collection 和 Collections 有什么区别?
Collection:集合的顶级接口,抽象了许多集合的通用接口和方法
Collections:集合的工具类,定义了许多静态方法,用于对集合中元素操作
20.List、Set、Map 之间的区别是什么?
比较 | List | Set | Map |
---|---|---|---|
继承的接口 | Collection | Collection | |
常见的实现类 | ArrayList,LinkedList,Vector | HashSet,TreeSet,LinkedHashSet | HashMap,HashTable |
常见的方法 | add(),remove(),clear() | add(),remove(),clear() | put(),get(),remove() |
元素 | 可重复, | 不可重复 | 不可重复 |
顺序 | 有序 | 无序 | |
线程安全 | Vector线程安全 | HashTable线程安全 |
21.HashMap 和 Hashtable 有什么区别?
比较 | HashMap | HashTable |
---|---|---|
线程是否安全 | 不安全 | 安全 |
效率 | 高 | 低 |
null键的支持 | 支持 | 不支持 |
初始容量默认时 | 初始容量默认16,以2n增长 | 初始容量11,2n+1增长 |
初始容量给定 | 增长为2的初始容量次幂使用 | 给定容量 |
底层数据结构 | 数组+链表+红黑树 | 数组+链表 |
22.如何决定使用 HashMap 还是 TreeMap?
有序集合选TreeMap,增删选HashMap
23.说一下 HashMap 的实现原理?
根据HashCode()来确定元素的唯一hash,当元素位置已经存在时候,采用链表方式,当链表长度大于8时候,采用红黑树。
24.说一下 HashSet 的实现原理?
HashSet底层由HashMap实现
HashSet的值存放于HashMap的key上
HashMap的value统一为PRESENT
25.ArrayList 和 LinkedList 的区别是什么?
比较 | ArrayList | LinkedList |
---|---|---|
线程安全 | 不同步 | 不同步 |
底层数据结构 | 数组 | 双向链表(1.6以前循环链表) |
插入和删除对于元素位置影响 | 受,需要移动 | 不受 |
访问速度 | 快 | 慢 |
内存空间占用 | 结尾预留空间 | 双向链表中直接前驱和后继 |
26.如何实现数组和 List 之间的转换?
List转换成为数组:调用ArrayList的toArray方法。
数组转换成为List:调用Arrays的asList方法。
27.ArrayList 和 Vector 的区别是什么?
Vector:同步
ArrayList:不同步
28.Array 和 ArrayList 有何区别?
比较 | Array | ArrayList |
---|---|---|
存储 | 存储基本数据和对象 | 对象 |
大小 | 固定 | 可变 |
使用场景 | 保存整个程序运行期间都会存在而且不变的数据 | 数据查找方便 |
29.在 Queue 中 poll()和 remove()有什么区别?
方法作用是移除队列的头,获取元素失败,remove()返回异常,poll返回null
30.哪些集合类是线程安全的?
Vector,HashTable,ConcurrentHashMap
31.迭代器 Iterator 是什么?
是一种设计模式,用来遍历对象。
32.Iterator 怎么使用?有什么特点?
List<String> list = new ArrayList<>();
Iterator<String> it = list. iterator();
while(it. hasNext()){
String obj = it. next();
System. out. println(obj);
}
//Iterator 的特点是更加安全,因为它可以确保,在当前遍历的集合元素被更改的时候
//就会抛出 ConcurrentModificationException 异常。
33.Iterator 和 ListIterator 有什么区别?
比较 | Iterator | ListIterator |
---|---|---|
遍历范围 | set+list | 只有list |
特点 | 单向,简单 | 双向,封装了许多方法 |
34.怎么确保一个集合不能被修改?
/*可以使用 Collections. unmodifiableCollection(Collection c) 方法来创建一个只读集合,这样改变集合的任何操作都会抛出 Java. lang. UnsupportedOperationException 异常。
*/
List<String> list = new ArrayList<>();
list. add("x");
Collection<String> clist = Collections. unmodifiableCollection(list);
clist. add("y"); // 运行时此行报错
System. out. println(list. size());
35.自动装箱和自动拆箱原理
/*把基本类型转换成包装类型的过程叫做装箱(boxing)。
反之,把包装类型转换成基本类型的过程叫做拆箱(unboxing)。
基本——对象:Integer.valueOf();
对象——基本:new Interger(4).intValue();
*/
Integer i3 = Integer.valueOf(4);
/* Intege——int */
Integer i4 = new Integer(4);
int n = i4.intValue();
比较 | 基本类型 | 包装 |
---|---|---|
null | 不能为空 | 可以为空 |
泛型 | 不行 | 可以 |
效率 | 低 | 高 |
37.分析以下代码
// 1)基本类型和包装类型,true,Integer的自动拆箱,数字比。
int a = 100;
Integer b = 100;
System.out.println(a == b);
// 2)两个包装类型,true,指向相同的对象,当范围在-128—127时候,会使用缓存中的对象。
Integer c = 100;
Integer d = 100;
System.out.println(c == d);
// 3),false
c = 200;
d = 200;
System.out.println(c == d);