Java软件开发
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
师面试题及解答(第1部分)
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
1.1 Java软件开发工程师面试题及解答(第1部分)
1.1.1 Java中的集合框架
1、什么是集合框架(API)
那么有了集合的概念,什么是集合框架呢,集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
1) 接口:即表示集合的抽象数据类型。接口提供了让我们对集合中所表示的内容进行
单独操作的可能。
2) 实现:也就是集合框架中接口的具体实现。实际它们就是那些可复用的数据结构。
3) 算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方
法,例如查找、排序等。这些算法通常是多态的,因为相同的方法可以在同一个接
口被多个类实现时有不同的表现。事实上,算法是可复用的函数。如果你学过C++,
那C++中的标准模版库(STL)你应该不陌生,它是众所周知的集合框架的绝好例
子。
2、集合框架对我们编程有何助益
(1)它减少了程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
的辛劳。
集合框架通过提供有用的数据结构和算法使你能集中注意力于你的程序的重要部分上,而不是为了让程序能正常运转而将注意力于低层设计上。通过这些在无关API之间的简易的互用性,使你免除了为改编对象或转换代码以便联合这些API而去写大量的代码。 (2)它提高了程序速度和质量。
集合框架通过提供对有用的数据结构和算法的高性能和高质量的实现使你的程序速度和质量得到提高。因为每个接口的实现是可互换的,所以你的程序可以很容易的通过改变一个实现而进行调整。另外,你将可以从写你自己的数据结构的苦差事中解脱出来,从而有更多时间关注于程序其它部分的质量和性能。
(3)减少去学习和使用新的API 的辛劳。
许多API天生的有对集合的存储和获取。在过去,这样的API都有一些子API帮助操纵它的集合内容,因此在那些特殊的子API之间就会缺乏一致性,你也不得不从零开始学习,并且在使用时也很容易犯错。而标准集合框架接口的出现使这个问题迎刃而解。
杨教授工作室,版权所有,盗版必究, 1/4页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
(4)减少了设计新API的努力。
设计者和实现者不用再在每次创建一种依赖于集合内容的API时重新设计,他们只要使用标准集合框架的接口即可。
(5)集合框架鼓励软件的复用。
对于遵照标准集合框架接口的新的数据结构天生即是可复用的。同样对于操作一个实现了这些接口的对象的算法也是如此。
有了这些优点,并通过合理的使用,它就会成为程序员的一种强大的工具。不过,从历史上来看,集合大多其结构相当复杂,也就给它们一个造成极不合理的学习曲线的坏名声。但是,希望Java2的集合框架能缩短你的学习曲线,从而快速掌握它。 3、说出 ArrayList、Vector和LinkedList的存储性能和特性
(1)集合:具有某种特定性质的事物的总体,这里的“事物”可以是人,物品,也可以是数学元素。
(2)在计算机中如何高效地查询数据、存储数据、快速满足变化——应用算法、数据结构
)在Java5中有四个主要集合接口: (3
1) List,列表,一般情况下元素按自然顺序排列。可以根据索引任意访问其中元素。
具体方法是
get(int index)。
2) Queue,队列,FIFO或LIFO,还有优先级队列都实现此接口。只能访问对首元素。
3) Set,元素唯一,中文有翻译为组。通过Iterator访问。
4) Map,键-值映射,Map并没有实现Collection接口,但它是Java集合框架的一部分。
通过键访问。get(Object key).
5) 在java6中新增Deque接口,实现双端队列。
不同类型的集合之间的差别,——在内存中存储的数据结构、数据访问性能、并发访
问时的线程安全~
(4)ArrayList、Vector和LinkedList的存储性能和特性
1) ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数
据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数
组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了
synchronized方法(线程安全),通常性能上较ArrayList差。
2) LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但
是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
杨教授工作室,版权所有,盗版必究, 2/4页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
4、Collection 和 Collections的区别。
(1)Collection是集合类的父接口,继承与他的接口主要有Set 和List。 (2)Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
5、HashMap和Hashtable的区别
(1)它们都是Map接口的实现类 ,他们都完成了Map接口
(2)HashMap是Hashtable的轻量级实现(非线程安全的实现)----也就是说HashMap是非线程安全的,而Hashtable是线程安全的。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
在编程应用方面的不同形式:
public class MyServlet Extends HttpServlet {
Hashtable oneHashtable=new Hashtable();
HttpServlet Respone respone ){ public void doPost(HttpServlet Request reruest,
HashMap oneHashMap=new HashMap();
}
}
(3)在其中存储数据时的不同点(也就是对数据的
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
)
1) HashMap允许空(null)键值(key)、由于非线程安全,效率上可能高于Hashtable。
2) HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
3) HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。
因为contains方法容易让人引起误解。
4) Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个
实现。Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有
很大的差异。
6、List, Set, Map是否继承自Collection接口?
List和Set是继承自Collection接口,但Map不是。
Map Collection
杨教授工作室,版权所有,盗版必究, 3/4页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
List Set
7、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
8、集合在应用中的总结
(1)如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,(2)如果需要快速随机访问元素,应该使用ArrayList。 (3)如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
)要特别注意对哈希表的操作,作为key的对象要正确重写写equals和hashCode方法。 (4
(5)尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。
杨教授工作室,版权所有,盗版必究, 4/4页