原文:https://dzone.com/articles/to…
作者: Sonia Mathias
翻译: 祝坤荣
在Java中,汇合是一种提供了存储与操作批量对象的框架。在JDK1.2中“汇合框架”就被定义了,而且它提供了所有的汇合类和接口。Java汇合类中最次要的两个次要接口是Collection接口(java.util.Collection)和Map接口(java.util.Map)。Java汇合框架提供的接口包含Set,List,Queue,Deque,提供类包含ArrayList,Vector,LinkedList,HashSet,PriorityQueue,TreeSet和LinkedHashSet。
须要一个拆散的汇合框架
如果咱们不应用汇合框架,规范的用于给Java对象分组的办法是Arrays,Vectors或者HashTable。他们都没有通用的接口。他们的实现都是被独自定义的且相互之间没有任何分割。因而,要去记住所有不同的办法,语法,和创立函数都很艰难。
比方,如果要给Vector加一个元素咱们会应用addElement()办法,而给Hashtable加一个元素则应用put()办法。
应用汇合框架的益处
- 升高编程累赘:一个开发者能够聚焦在汇合的最佳应用办法上而不是聚焦在汇合的设计上。这对实现形象有益处。
- 晋升编程速度:汇合提供了一种数据结构的高性能实现,这能够晋升速度。
- 因为Java曾经是一种宽泛应用的语言了,大大小小的组织都在应用它。为本人筹备好根底的和高级的Java面试题能够对面试有益处。
让咱们看看java面试中被问得最多的一些问题。
对高级开发者问的最多的问题
问题1:什么是Java中的框架?
答:框架是提供了脚手架性能的一组类和对象的汇合。现实的面向对象设计都应该有一个框架提供了对于汇合类的同类型工作提供同样的操作。
问题2:定义Java的汇合框架。
答:Java的汇合框架是一组接口和类的汇合,提供了高效保留和解决数据的办法。Java汇合框架提供的接口有Set,List,Queue,Deque,提供的类包含ArrayList,Vector,LinkedList,HashSet,PriorityQueue,TreeSet和LinkedHashSet。
问题3:Java汇合框架中ArrayList与Vector的不同之处。
答:
ArrayList
- 不是synchronized的
- 它能够以其数组大小的50%来扩大其大小
- 它不是线程平安的
- 它不是遗留类
Vector: - 它是synchronized的
- 它能够减少本人双倍的大小
- 它是线程平安的
- 它是遗留类
- 问题4:Iterator与Enumeration的不同点。
答:
Iterator - 它能够遍历遗留类和非遗留类
- 它比Enumeration慢
- 它在遍历汇合时能够执行remove操作
- 它是fail-fast的
Enumeration
- 它只能遍历遗留元素
- 它比Iterator快
- 它只能在汇合上执行traverse
- 它不是fail-fast的
问题5:LinkedList与ArrayList的区别?
答:
ArrayList
- 这个类实现了list接口
- 这个类应用了动静数组来存储元素
- 插入与移除操作的最佳复杂度是O(1),而最差复杂度是O(n)。查问操作(如存储一个特定索引的元素)会须要O(1)的工夫。
- ArrayList在存储和查问数据时无能的比拟好。
LinkedList
- 这个类实现了list接口和deque接口。
- 这个类存储元素应用了双链列表。
- 插入与移除操作提供了来源gaodai#ma#com搞@代~码网O(1)的性能。查问操作(比方查问一个特定索引的元素)须要O(n)的工夫。
- LinkedList在操作存储好的数据时性能更好。
- 问题6:解释一下Queue接口的poll()与remove()办法的不同。
答:两个办法都返回并移除队列头的内容。它们只有在队列为空时行为不一样;remove()会抛一个异样而poll()会返回null。
问题7:Comparable与Comparator的不同。
答:
Comparable
- 它提供了被排序元素应用的compareTo()办法
- 它属于java.lang包
- 排序逻辑必须要与咱们想要排序的对象在同一个类中
- 它提供独自的排序序列。
- 理论类被改过了
Comparator
- 它提供排序元素用的compare()办法
- 它在java.util包中
- 排序逻辑必须要在不同的类中,以便依据不同对象的不同属性来编写排序办法
- 它提供多种排序序列
- 理论类没有被改变
问题8:计算机内存中Stack的定义是?
答:stack是计算机内存中一个非凡区域,用来存储函数创立的长期变量。在stack中,变量是在运行时被申明,存储和初始化的。
问题9:列出map接口的汇合视图。
答:
汇合视图(Collection view)办法能够让Map在以下
三种形式视为一个汇合:
- 键汇合视图:Map中保留的所有键的Set汇合。
- 值汇合视图:Map中保留的所有值的汇合。这个汇合不是一个Set,因为不同的主键key能够被映射到同一个值value。
- Entry汇合视图:Map中键值对的汇合Set。Map接口提供了一个小的内嵌接口Map.Entry,元素都存储在这个Set。
问题10:定义EnumSet。
答:它是能够应用enum枚举类型的Set实现。所有的元素都必须属于一个特定的enum类型。它不是synchronized。NULL key是不容许的。
问题11:什么办法能让汇合变成线程平安的?
答:这些办法是:
- Collections.synchronizedList(list);
- Collections.synchronizedMap(map);
- Collections.synchronizedSet(set);
- 问题12:Queue与Deque的不同点
答:
Queue - 家喻户晓是单向队列
- 队列中的元素在填加或删除是都在同一端
- Less versatile
Deque - 是双端队列
- 队列中的元素能够从队尾填加或者从两端填加和删除。
- More versatile
问题13:hashmap与hashtable的不同
答:
Hashmap
- 不是synchronized,不是线程平安
- 继承了AbstractMap类
- 容许一个null key和多个null value。
- 能够被iterator遍历
Hashtable - Synchronized的,线程平安
- 继承了Dictionary类
- 不容许空key或者值
- 能够被enumerator和iterator遍历
问题14:定义Iterator。
答:Iterator()是一个提供了遍历汇合办法的接口。它提供了一种普世的形式来遍历汇合中的元素,并实现了iterator设计模式。
问题15:什么是navigable map?
答:NavigableMap接口,Java汇合框架的成员,属于java.util包。它是SortedMap的子接口,提供了如lowerKey,floorKey,ceilingKey和higherKey这样不便的导航办法。它也提供了从现有map创立一个子map的办法。
问题16:什么是queue接口的peek()?
答:Peek()返回了队列的头。它不移除任何元素。当队列为空时返回null。
未完待续
本文来自祝坤荣(时序)的微信公众号「麦芽面包」,公众号id「darkjune_think」
开发者/科幻爱好者/硬核主机玩家/业余翻译
转载请注明。
微博:祝坤荣
B站: https://space.bilibili.com/23…
交换Email: [email protected]