容器面试问题

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 之间的区别是什么?

比较ListSetMap
继承的接口CollectionCollection
常见的实现类ArrayList,LinkedList,VectorHashSet,TreeSet,LinkedHashSetHashMap,HashTable
常见的方法add(),remove(),clear()add(),remove(),clear()put(),get(),remove()
元素可重复,不可重复不可重复
顺序有序无序
线程安全Vector线程安全HashTable线程安全

21.HashMap 和 Hashtable 有什么区别?

比较HashMapHashTable
线程是否安全不安全安全
效率
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 的区别是什么?

比较ArrayListLinkedList
线程安全不同步不同步
底层数据结构数组双向链表(1.6以前循环链表)
插入和删除对于元素位置影响受,需要移动不受
访问速度
内存空间占用结尾预留空间双向链表中直接前驱和后继

26.如何实现数组和 List 之间的转换?

List转换成为数组:调用ArrayList的toArray方法。
数组转换成为List:调用Arrays的asList方法。

27.ArrayList 和 Vector 的区别是什么?

Vector:同步
ArrayList:不同步

28.Array 和 ArrayList 有何区别?

比较ArrayArrayList
存储存储基本数据和对象对象
大小固定可变
使用场景保存整个程序运行期间都会存在而且不变的数据数据查找方便

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 有什么区别?

比较IteratorListIterator
遍历范围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);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值