C. Collections

1.Java8中跟集合相关的特性有哪些?

Java8带来主要的变化在集合的API,一些变化如下:

∆ 1.Java Stream API提供集合类既支持序列也支持并发处理;

∆ 2.Iterable interface is extended with forEach()默认迭代集合的方法。在使用lambda expressions会非常有帮助,因为参数是function interface

∆ 3.混杂的集合API改进,例如Iterator接口的forEachRemaining(Consumer action)方法,Map的replaceAll(), compute(), merge()方法。

2.什么是Java集合框架?举例说些集合框架的好处?

集合广泛用在编程语言中,最初Java发布包含少有的几个集合类:Vector, Stack, Hashtable, Array。但从更广的角度和用途来看,Java1.2迎来了集合框架,使集合接口、实现、算法成为一体。

Java集合经历很长一段时间后才迎来泛型和并发集合类。它也包含阻塞接口和并发包里的相关实现。

集合框架的一些好处如下:

∆ 减少了开发使用核心集合类来实现自己的集合类,直接用就好了;

∆ 代码质量随着集合框架得到提升;

∆ 降低了JDK维护集合包的工作量;

∆ 可重用性和互操作性。

3.集合框架中泛型的好处有哪些?

Java1.5迎来了泛型,所有的集合接口和实现都强度依赖。泛型支持我们定义集合可以包含的类型,所以如果我们尝试添加任何其他类型的元素,它会编译报错。这样在编译时就报错避免了运行时ClassCastException。泛型也让代码定义清晰,我们不需要casting和instanceof操作。

强烈推荐阅读Java Generic Tutorial更好的了解泛型。

4.Java集合框架中基本接口有哪些?

Collection是所有集合基础的root。一个集合展示的一组对象称为它的元素。Java平台没有直接提供这个接口的实现。

Set是不含重复元素的集合。这个接口模型设计精确而抽象,用以展示sets集合,例如一副扑克牌。

List是排序的集合而且包含重复元素。你可以通过索引访问任意元素,List更像任意长度的数组。

Map是包含键值对的对象,一个map不能包含重复的键:每个键最多含一个值。

一些其他的接口有QueueDequeueIteratorSortedSetListIterator

5.为什么集合不继承Cloneable和Serializable接口?

集合接口里的对象叫做元素。如何保存它们留给具体的集合来实现。例如,有些集合像List允许重复元素而有些集合像Set则不允许。

大部分集合实现都有clone方法,但并不以为所有的集合实现都包含。是因为集合是抽象展现层,重要的是它的实现。当处理真正的实现类时,克隆和序列化的语义和实现才会被用起来。所以具体的实现应该定义它如何克隆和序列化和它是否支持克隆和序列化。

所以授权所有集合实现克隆和序列化非常不灵活而且限制性。具体的实现类需要决定它是否可以克隆或序列化。

6.为什么Map接口不继承Collection接口?

尽管Map接口和它的实现是集合框架的一部分,但Map不是集合,集合也不是Map,因此Map继承集合没有任何意义,反之亦然。

如果Map继承集合接口,那么它的元素是什么?Map包含key-value对,而且提供遍历键或值的方法,但并不适用“一组元素”的范例。

7.什么是Iterator?

Iterator接口提供方法迭代任何集合,我们可以通过iterator()方法来获取iterator实例。Iterator取代枚举(Java集合框架)。迭代中允许底层删除元素。Java集合iterator提供泛型方式来透传集合元素类型Iterator Design Pattern

8.Enumeration和Iterator接口有什么区别?

枚举要比Iterator快两倍也使用更少内存,枚举是非常基础的同时满足基本需求。但是Iterator比枚举更加安全,因为它不允许其他线程在迭代过程中修改集合对象。

Iterator在Java集合框架里取代枚举,Iterator允许底层集合删除元素而枚举不行。Iterator方法名称有些改进使得它功能更清晰。

9.为什么没有类似Iterator.add()的方法为集合添加元素?

在集合收缩时不能保证迭代顺序,因为语义不清晰。然后ListIterator提供add操作,,因为它保证迭代顺序。

10.为什么Iterator没有直接获取下一个元素的方法,非要用下标移动?

它可以在当前Iterator接口实现,但它被使用很少,所以接口包含这个方法没有意义,其他所有继承者都要去实现。

11.Iterator和ListIterator有什么区别?

∆ 我们可以在Set和List集合间使用Iterator,然而ListIterator只能用在Lists;

∆ Iterator只能用在向后迭代,然而ListIterator可以向前、向后迭代;

∆ ListIterator继承Iterator接口,引入了些额外功能,像add元素,替换元素,获取前一个和后一个元素索引位置。

12.遍历list的方法有什么区别?

两种方法——用iterator和for-each循环。

使用iterator会线程安全,因为它确保当底层元素被修改,会抛出异常ConcurrentModificationException。

13.如何理解iterator“速错”机制(fail-fast)?

Iterator“速错”机制在每次我们试图获取下一个元素时,检查底层集合结构是否有任何修改。如果有,它会抛出ConcurrentModificationException异常。集合类的Iterator所有实现都是设计成“速错”除了线程集合类,例如ConcurrentHashMap和CopyOnWriteArrayList。

14.fail-fast和fail-safe有什么区别?

迭代“速错”机制通过底层集合克隆实现,因此它不会对集合产生任何修改影响。设计上,所有java.util包下的集合类都是“速错”,而java.util.concurrent包下的集合类都是“安全失败”机制。

“速错”机制迭代会抛出ConcurrentModificationException异常,“安全失败”机制不会抛出。

查看文章CopyOnWriteArrayList Example了解更多信息。

15.遍历集合时如何避免ConcurrentModificationException?

迭代集合时候可以使用并发集合类来避免ConcurrentModificationException,例如CopyOnWriteArrayList取代ArrayList。

查看文章ConcurrentHashMap Example了解更多信息。

16.Iterator接口为什么没有具体实现?

迭代接口为迭代集合声明方法,但其实现在具体的集合类中展示。每个集合类都返回一个迭代,为其迭代的内部内使用。

这样提供集合类是选择“速错”机制还是“安全失败”机制。例如ArrayList迭代是“速错”而CopyOnWriteArrayList是“安全失败”。

17.什么是UnsupportedOperationException?

UnsupportedOperationException是操作不被允许的异常,用于扩展JDK类集合框架中java.util.Collections.UnmodifiableCollection抛出的添加所有或删除所有的操作。

18.HashMap是如何实现的?

a

19.hashCode()和equals()的重要性有哪些?

HashMap使用Key对象的hashCode()方法和equals()来决定索引放在哪个键值对里,这个方法也用在从HashMap中取值时候。如果这两个方法没有实现正确,那么不同Key会产生同样的hashCode()和equals()的输出,这种情况下HashMap就不会把他们存在不同位置,而是认为是相同的覆盖掉。

类似的所有的集合类不允许通过这两个方法存取重复数据,所以正确实现它们非常重要。这两个方法实现必须遵循以下原则:

If o1.equals(o2), then o1.hashCode() == o2.hashCode() should always be true.

If o1.hashCode() == o2.hashCode is true, it does not mean that o1.equals(o2) will be true.

20.是否可以用任何class当成Map的键?

我们可以使用任何类来做Map的键,然而以下关键点需要考虑:

∆ 如果类重载equals()方法,那必须也重载hashCode()方法;

∆ 类必须遵守关联equals()、hashCode()的所有实例,所及尽早遵循这些原则;

∆ 

21.Map接口提供的集合视图有什么区别?

a

22.HashMap和Hashtable区别有哪些?

a

23.如何决定使用HashMap还是TreeMap?

a

24.ArrayList和Vector异同和区别有哪些?

a

25.Array和ArrayList区别有哪些?什么时候会用Array替代ArrayList?

a

26.ArrayList和LinkedList的区别有哪些?

a

27.哪一个集合类提供随机访问它的元素?

a

查看java collections pdf了解更多细节。

28.什么是EnumSet?

a

29.什么集合类是线程安全的?

s

30.什么是线程集合类?

a

31.什么是BlockingQueue?

a

32.列举出队列和栈的区别?

a

33.什么是Collections类?

a

34.Comparable和Comparator接口分别是什么?

a

35.Comparable和Comparator接口区别有哪些?

a

36.Objects的列表如何排序?

a。

37.如果给函数传递集合参数,如何确保函数不会修改该集合?

a

38.用所给的集合如何创建线程同步集合?

a

39.集合框架的通用算法有哪些?

a

40.什么是Big-O notation?举几个例子

a

41.集合框架的最佳实践例子有哪些?

a

42.PriorityQueue是什么?

a

43.为什么不能写这样的代码 List<Number> numbers = new ArrayList<Integer>();?

a

44.为什么不能创建泛型array?或者写这样的代码List<Integer>[] array = new ArrayList<Integer>[10];

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容