微信号:tedu_java

介绍:一直被模仿,从未被超越!精彩的java之路,从选择达内开始!

Java集合面试问题和答案

2017-10-13 14:46 达内JAVA学院

1.Java集合框架是什么?说出一些集合框架的优点?



2.集合框架中的泛型有什么优点?


3.Java集合框架的基础接口有哪些?

 

4.为何Collection不从Cloneable和Serializable接口继承?


5.为何Map接口不继承Collection接口?


6.Iterator是什么?


7.Enumeration和Iterator接口的区别?


8.为何没有像Iterator.add()这样的方法,向集合中添加元素?


9.为何迭代器没有一个方法可以直接获取下一个元素,而不需要移动游标?


10.Iterater和ListIterator之间有什么区别?


11.遍历一个List有哪些不同的方式?

List<String> strList = new ArrayList<>();//使用for-each循环for(String obj : strList){System.out.println(obj);}//using iteratorIterator<String> it = strList.iterator();while(it.hasNext()){String obj = it.next();System.out.println(obj);}

使用迭代器更加线程安全,因为它可以确保,在当前遍历的集合元素被更改的时候,它会抛出ConcurrentModificationException。


12.通过迭代器fail-fast属性,你明白了什么?


13.fail-fast与fail-safe有什么区别?


14.在迭代一个集合的时候,如何避免ConcurrentModificationException?


15.为何Iterator接口没有具体的实现?


16.UnsupportedOperationException是什么?


17.在Java中,HashMap是如何工作的?


18.hashCode()和equals()方法有何重要性?


19.我们能否使用任何类作为Map的key?

我们可以使用任何类作为Map的key,然而在使用它们之前,需要考虑以下几点:

(1)如果类重写了equals()方法,它也应该重写hashCode()方法。

(2)类的所有实例需要遵循与equals()和hashCode()相关的规则。请参考之前提到的这些规则。

(3)如果一个类没有使用equals(),你不应该在hashCode()中使用它。

(4)用户自定义key类的最佳实践是使之为不可变的,这样,hashCode()值可以被缓存起来,拥有更好的性能。不可变的类也可以确保hashCode()和equals()在未来不会改变,这样就会解决与可变相关的问题了。

比如,我有一个类MyKey,在HashMap中使用它。

//传递给MyKey的name参数被用于equals()和hashCode()中MyKey key = newMyKey('Pankaj'); //assume hashCode=1234myHashMap.put(key, 'Value');// 以下的代码会改变key的hashCode()和equals()值key.setName('Amit'); //assumenew hashCode=7890//下面会返回null,因为HashMap会尝试查找存储同样索引的key,而key已被改变了,匹配失败,返回nullmyHashMap.get(new MyKey('Pankaj'));

那就是为何String和Integer被作为HashMap的key大量使用。

 

20.Map接口提供了哪些不同的集合视图?

Map接口提供三个集合视图:

(1)Set keyset():返回map中包含的所有key的一个Set视图。集合是受map支持的,map的变化会在集合中反映出来,反之亦然。当一个迭代器正在遍历一个集合时,若map被修改了(除迭代器自身的移除操作以外),迭代器的结果会变为未定义。集合支持通过Iterator的Remove、Set.remove、removeAll、retainAll和clear操作进行元素移除,从map中移除对应的映射。它不支持add和addAll操作。

(2)Collection values():返回一个map中包含的所有value的一个Collection视图。这个collection受map支持的,map的变化会在collection中反映出来,反之亦然。当一个迭代器正在遍历一个collection时,若map被修改了(除迭代器自身的移除操作以外),迭代器的结果会变为未定义。集合支持通过Iterator的Remove、Set.remove、removeAll、retainAll和clear操作进行元素移除,从map中移除对应的映射。它不支持add和addAll操作。

(3)Set<Map.Entry<K,V>> entrySet():返回一个map钟包含的所有映射的一个集合视图。这个集合受map支持的,map的变化会在collection中反映出来,反之亦然。当一个迭代器正在遍历一个集合时,若map被修改了(除迭代器自身的移除操作,以及对迭代器返回的entry进行setValue外),迭代器的结果会变为未定义。集合支持通过Iterator的Remove、Set.remove、removeAll、retainAll和clear操作进行元素移除,从map中移除对应的映射。它不支持add和addAll操作。



【免责声明】本账号旨在介绍更多的最新信息,部分信息转载自各类纸媒、网媒之所有作品,版权归作者本人所有,转载文章目的在于分享信息、提供阅读,不代表本平台赞同其观点和对其真实性负责!若作者或版权人不愿被使用,请即与我方公众号tedu_java联系,如有侵权本账号将迅速给您回应并做处理


如果你身边的小伙伴还在为找工作发愁,或者想转行,赶快将他(她)的姓名和联系方式发给茜茜老师(17600265125),茜茜老师会与他(她)致电并给他(她)最合适的学习建议并免费邀请他试听5天的课程,座位有限,抓紧时间哦~~



 
达内JAVA学院 更多文章 AI 做交通到底成不成?阿里云城市大脑:成! 如何才能成为一个好的Java架构师 编程语言 9 月排行榜:Java、C\/C++ 何时结束霸占 Top3 怎样对带有不可序列化属性的Java对象进行序列化 我们是谁?我们是程序猿!
猜您喜欢 勒索病毒爆发的前后,第 5 期技术微周刊出炉了 DaoCloud的第一个100天 道歉声明 21天混入数据科学家队伍(上) 一次0和1相遇的跑步派对