JAVA集合面试题_第1页
JAVA集合面试题_第2页
JAVA集合面试题_第3页
JAVA集合面试题_第4页
JAVA集合面试题_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java集合框架是Java编程语言的基础,也是Java面试中非常重要的知识点。下面是一些关于Java集合的重要问题和答案。1 .什么是1.Java集合框架,说说集合框架的优点?每种编程语言都有集合。 第一个Java版本号由Vector、Stack、HashTable和Array集合类组成。随着集合的广泛应用。 Java1.2提出了一个集合框架,包括所有集合接口、实现和算法。为了确保线程的安全性,使用了通用型和同时集合类,Java经历了很长时间。 包括在Java和建设过程中阻止接口及其实现。集合框架的部分优点包括:(1)不是使用核心集合类来降低开发成本,实现自己的集合类。(2)随着严格测试的集合帧类的使用。 提高了代码的质量。(3)通过使用JDK附带的收藏类,可以削减代码维护成本。(4)多重性和操作性。2 .集合框架的通用性有什么优点?Java1.5引入了通用性。 所有集合接口和实现都被大量使用。 一般而言,由于我们同意提供可容纳于集合中的对象类型。 如果添加其他类型的元素,则编译时会出错。 这样,在运行时就不会发生ClassCastException。 因为编译时会显示错误讯息。通用性也使代码清晰,因此不需要显式转换或instanceOf运算符。在运行时也有好处。 因为不会生成类型检查的字节码指令。3.Java收藏框架的基本接口是什么?o Collection是集合级别的根接口。集合表示一组对象。 这些对象是元素。Java平台不能直接实现此接口。set是不能包含重复要素的集合。这个接口将数学的集合抽象建模。 用来表示像卡片一样的集合。o List是有秩序的集合。 可以含有重复元素。可以使用索引访问任何元素。 List类似于长度动态转换的数组。o Map是将key映射到value的对象。 Map不能重复包含key。 每个key只能映射一个value。其他接口包括Queue、Dequeue、SortedSet、SortedMap和ListIterator。为什么Collection不从Cloneable和Serializable接口继承?Collection接口指定一组对象。 对象是它的元素。 如何保留这些元素取决于Collection的详细实现。比如说。 List这样的Collection实现同意反复的要素。 其他的都不像Set那样同意。 许多Collection实现都有公共克隆方法。但是。 把它放在集合的所有实现中是没有意义的。 这是因为Collection是抽象表现。 重要的是实现。在与详细的实现交往时,克隆和序列化的意义和意义发挥着作用。 因此,详细实现必须确定克隆或序列化的方法,或者是否可以克隆或序列化。在所有实施中允许克隆和序列化最终会带来更少的灵活性和更多的限制。 特定的实现应确定是否可以与克隆进行序列化。5 .为什么map接口不继承Collection接口?Map接口及其实现也是集合框架的一部分。 Map不是集合。 集合也不是Map。因此,Map继承Collection没有意义,反之亦然。如果Map继承Collection接口,则元素将到达何处,Map包含一对key-value,提供了提取key或value列表集合的方法,但不符合“组对象”规范。6 .什么是6.Iterator?Iterator接口提供了一个无论Collection如何都可导航的接口。可以使用集合中的iterator方法检索iterator实例。 iterator取代了Java集合框架的列举。 iterator同意调用方在迭代过程中删除元素。7.Enumeration和Iterator接口之间有什么区别?Enumeration的速度是Iterator的两倍,使用的内存更少。Enumeration非常基础,也满足了基础需求。 但是,Iterator比Enumeration更安全,当一个集合被遍历时。 阻止其他线程更改集合。iterator取代了Java集合框架的列举。iterator同意调用方从集合中删除元素,而且不能进行Enumeration。为了更清楚它的功能,改进了迭代器方法的名称。为什么没有Iterator.add ()这样的方法? 是否要向集合中添加元素?意思不明。 众所周知,Iterator的协议不能确保反复的顺序。 但是必须注意。 列表编辑器不提供确保迭代顺序的add操作。9 .为什么迭代器无法直接获取以下元素? 不需要移动光标吗?可以在当前Iterator的顶级实现。 但是,如果将它们添加到接口中,则必须为每个继承实现它们。 这没有意义。10.Iterater和ListIterator的区别是什么?(使用Iterator可以遍历Set和List的集合,而ListIterator只能遍历List。(2)Iterator只是前进。 LIstIterator可以双向遍历。(3)ListIterator继承自Iterator接口,添加了添加元素、替换元素、获取前或后元素的索引位置等附加功能。*11 .遍历列表的方法是什么?List strList=new ArrayList () :使用for-each循环for (string obj : strist )System.out.println(obj )以下称为/using iteratorIterator it=strList.iterator ()请参见while(it.hasnext () )String obj=it.next ();System.out.println(obj )以下称为使用iterator,线程更加安全。 这样可以确保当前被遍历的集合元素发生更改。 抛出concurrentmodificationexception。12 .在迭代器fail-fast属性中,说明了什么?每次尝试检索以下元素时,Iterator fail-fast属性都会检查当前集合结构的更改。 假设不管有什么变化都发现了。 抛出concurrentmodificationexception。 Collection的所有Iterator实现都是以fail-fast设计的(不包括并发收集类,如ConcurrentHashMap和CopyOnWriteArrayList )。13.fail-fast和fail-safe有什么区别?由于Iterator的fail-fast属性与当前集合配合使用,因此不会受集合更改的影响。Java.util包中的所有集合类都设计为fail-fast。 java.util.concurrent的集合类为fail-safe。fail-fastiterator抛出concurrentmodificationexception,而fail-safeiterator不抛出concurrentmodificationexception。14 .重复一个集合时,如何避免concurrentmodificationexception?在遍历集合时,可以使用并发集合类来避免concurrentmodificationexception,如CopyOnWriteArrayList。 不是ArrayList。15 .为什么没有详细实现iterator接口?Iterator接口定义了遍历集合的方法。 但是,其实现是集合实现类的责任。 返回横移用的Iterator的集合类别分别具有独自的Iterator安装内部类别。这同意了选择迭代器是故障- fast还是故障- safe的聚合类。 例如,ArrayList迭代器是fail-fast。 CopyOnWriteArrayList迭代器为故障-安全。16 .什么是unsupportedoperationexception?UnsupportedOperationException是一个例外,表示不支持操作。JDK类已经大量使用,集合框架Java.util.collections.unmodifiablecollection会在所有add和remove操作中抛出此异常。17.hashmap在Java中的作用是什么?HashMap将key-value对存储在Map.Entry静态内部类实现中。HashMap使用哈希算法。 put和get方法。 使用hashCode ()和equals ()方法。 通过传递key-value对调用put方法时。 HashMap使用Key hashCode ()和散列算法来标识存储key-value对的索引。由于Entry存储在链接列表中,因此假定Entry存在。 使用equals ()方法检查传递的key是否已经存在。 如果存在,则复盖value。 不存在假设。 将创建并保存新的entry。传递key并调用get方法时,再次使用hashCode ()查找数组中的索引,使用equals ()方法查找正确的Entry并返回其值。 下图说明了详细情况。与HashMap相关的其他重要问题是容量、负载因子和阈值调整。 HashMap的默认初始容量为32,负载因子为0.75。阈值是负载因子乘以容量,假设map的大小大于阈值,则无论何时添加entry,HashMap都会进一步散列map的内容。 使用更大的容量。 容量始终是2的幂。 因此,假设您知道必须存储大量的key-value对。 例如,高速缓存从数据库提取的数据,然后使用正确的容量和负载因子初始化HashMap是一种好方法。18.hashCode ()和equals ()方法的重要性是什么?HashMap使用Key对象的hashCode ()和equals ()方法来确定key-value对的索引。 尝试从HashMap中检索值时,也会使用这些方法。假设这些方法没有正确实施。 在这种情况下,两个不同的Key可能会生成相同的hashCode ()和equals ()输出,HashMap会将它们视为相同并复盖它们。 不是保存在不同的地方。同样,所有不同意存储重复数据的集合类都使用hashCode ()和equals ()来查找重复数据。 正确实现是很重要的。equals ()和hashCode ()的实现应遵循以下规则(假设o1.equals(o2 ),o1.hashCode()=o2.hashCode ()总是true。(2)假设o1.hashCode()=o2.hashCode () 不意味着o1.equals(o2 )为true。19 .可以使用什么种类的Map的key?我们可以把什么种类作为Map的key使用,但是在使用之前必须考虑以下几点(1)假设类改写了equals ()方法。 还必须重写hashCode ()方法。(2)类的所有实例都必须遵循与equals ()和hashCode ()相关的规则。 请参考上述规则。(3)假设类别没有使用equals (),不应该在hashCode ()中使用。(4)用户独自定义key类的最佳做法是不变的。 这样,hashCode ()的值可以被缓存并具有更好的性能。即使是不变的类,hashCode ()和equals ()也可以保证将来不会变化,解决与可变相关的问题。例如,HashMap可以使用类MyKey。传递给MyKey的name参数由equals ()和hashCode ()使用mykey key=new mykey (pankaj )/assume hashcode=1234myHashMap.put(key,Value )/以下代码更改key的hashCode ()和equals ()值key.set name (Amit )/assume new hashcode=7890/接下来返回null。 因为HashMap试图查找包含相同索引的key。 key已更改,匹配失败,返回nullmyhashmap.get(mykey(pankaj ) )因此,String和Integer作为HashMap的key被广泛使用。20.Map接口提供了哪些不同的集合视图?Map界面包含三个集合视图:(1) setkey set () :返回map中包含的所有key的set视图。集合由map支持,map的变化反映在集合中,反之亦然。 当迭代器遍历集合时。 如果map发生变化(除去迭代器本身的移除操作外),则迭代器的结果是未定义的。集合支持通过I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论