而poll()只会返回null
面试题整理----Java容器---上接Java基础
Posted xianghebuyi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题整理----Java容器---上接Java基础相关的知识,希望对你有一定的参考价值。
18.java 容器都有哪些?
数组,String,java.util下的集合容器(conllection和map)
19.Collection 和 Collections 有什么区别?
collection是Java的集合,conllections相当于一个工具类,用来操作Java的Conllection
20.List、Set、Map 之间的区别是什么?
List接口和Set接口属于Collection接口,Map接口和Collection接口并列存在(同级)
list元素可重复,有序性;set无序且唯一;map采用键值对存储元素且key唯一
补充:数组和集合的区别----同一个数组只能存储同一类型数据,同一集合可以存储不同类型数据
21.HashMap 和 Hashtable 有什么区别?
Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。
HashMap是支持null键和null值的,而HashTable在遇到null时,会抛出NullPointerException异常。
我们说HashTable是同步的,HashMap不是,也就是说HashTable在多线程使用的情况下,不需要做额外的同步,而HashMap则不行。即HashTable是线程安全的,hashmap则不是
22.如何决定使用 HashMap 还是 TreeMap?
TreeMap<K,V>的Key值是要求实现java.lang.Comparable,所以迭代的时候TreeMap默认是按照Key值升序排列的;TreeMap的实现也是基于红黑树结构。
而HashMap<K,V>的Key值实现散列hashCode(),分布是散列的均匀的,不支持排序,数据结构主要是桶(数组),链表或红黑树。
所以,查询的时候使用HashMap,增加、快速创建的时候使用TreeMap
23.说一下 HashMap 的实现原理?
HashMap是基于Hash算法实现的,
我们通过put(key,value)存储数据,通过get(key)来获取数据
当传入key时,HashMap会根据Key.hashCode()计算出Hash值,根据Hash值将value保存在bucket里 ,。
当计算出相同的Hash值时,我们称之为Hash冲突,HashMap 的做法是用链表和红黑树存储相同Hash值的value,
当hash冲突的个数比较少时,使用链表存储,
否则使用红黑树。
24.说一下 HashSet 的实现原理?
HashSet是基于HashMap实现的,HashSet 底层使用HashMap来保存所有元素,
因此HashSet 的实现比较简单,相关HashSet 的操作,基本上都是直接调用底层HashMap的相关方法来完成,HashSet不允许有重复的值,并且元素是无序的。
25.ArrayList 和 LinkedList 的区别是什么?
ArrayList的实现是基于数组,LinkedList的实现是基于双向链表;
对于随机访问,ArrayList优于LinkedList;
对于插入和删除操作,LinkedList优于ArrayList;
LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。
26.如何实现数组和 List 之间的转换?
List转数组:toArray方法
数组转List:Arrays的asList(a)方法,也可以循环遍历
27.ArrayList 和 Vector 的区别是什么?
Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。
当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间
28.Array 和 ArrayList 有何区别?
Array类型的变量在声明的同时必须进行实例化(至少得初始化数组的大小),而ArrayList可以只是先声明。
Array只能存储同构的对象,而ArrayList可以存储异构的对象
Array是始终是连续存放的,而ArrayList的存放不一定连续
Array对象的初始化必须只定指定大小,且创建后的数组大小是固定的,而ArrayList的大小可以动态指定,其大小可以在初始化时指定,也可以不指定,也就是说该对象的空间可以任意增加。
29.在 Queue 中 poll()和 remove()有什么区别?
remove() ,如果队列为空的时候,则会抛出异常
30.哪些集合类是线程安全的?
Vector
Stack
Hashtable
java.util.concurrent包下所有的集合类
31.迭代器 Iterator 是什么?
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,
32.Iterator 怎么使用?有什么特点?
(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
(2) 使用next()获得序列中的下一个元素。
(3) 使用hasNext()检查序列中是否还有元素。
(4) 使用remove()将迭代器新返回的元素删除。
33补充Java基础---break和continue的区别
break是结束全部循环,continue是跳出本次循环执行下次循环
34.怎么确保一个集合不能被修改?
我们可以采用Collections包下的unmodifiableMap方法,通过这个方法返回的map,是不可以修改的。他会报 java.lang.UnsupportedOperationException错。 同理:Collections包也提供了对list和set集合的方法。
Collections.unmodifiableList(List)
Collections.unmodifiableSet(Set)
以上是关于面试题整理----Java容器---上接Java基础的主要内容,如果未能解决你的问题,请参考以下文章