常规面试题-5.容器

来源:互联网 发布:js date 编辑:程序博客网 时间:2024/06/07 20:25

1. JAVA容器是什么

Java容器框架包含了大量集合接口以及这些接口的实现类和操作它们的算法(例如排序,查找,反转,替换,复制,取最小元素等)。具体而言提供了List(列表)、Set(集合)、Stack(栈)、Map(映射表)。
下面介绍Set、List和Map 3个接口。
1.Set表示数学上定义的集合概念。其主要特点是集合中的元素不能重复,因此存入Set的每个元素必须定义equals()方法来确保对象的唯一性。
2.List又称为有序的Collection。他按对象进入的顺序保存对象,所以他能对列表中的每个元素的插入和删除位置进行精准的控制。
3.Map提供了从键映射到值得数据结构。Java中有HashMap、TreeMap、LinkedHashMap、WeakHashMap和IdentityHashMap。

2.Collection和Collections有什么区别

Collection是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法。实现该接口的类主要有List和Set,该接口目标是为各种具体的集合提供最大化的统一的操作方式。
Collections是针对集合类的一个包装类,它提供了一系列静态方法以实现对各种集合的搜索、排序、线程安全化等操作,其大多数方法都是用来处理线性表。Collections类不能实例化,如同一个工具类,服务于Collection框架。

3.ArrayList、Vector和Linkedlist区别

这三个均为可伸缩数组,即可以动态地改变长度的数组。
ArrayList和Vector都是基于存储元素的Object[] array来实现的,它们会在内存中开辟一块连续的空间来存储,由于数据的存储是连续的,因此,它们支持用序号(下标)来访问元素,同时索引数据的速度比较快。但是插入执行比较慢。
ArrayList和Vector都有一个初始化容量,当里面存储的元素超过这个大小就需要动态地扩充它们的存储空间。为了提高程序效率,每次增加多个存储单元。Vector默认扩充为原来2倍,ArrayList为原来1.5倍。
Arraylist与Vector最大的区别是synchronizee的使用,没有一个ArrayList的方法是同步的,而Vector绝大多数方法都是直接或者间接同步的。所以Vector是线程安全的,ArrayList不是线程安全的。正是由于Vector提供了线程安全的机制,其性能也要略逊于ArrayList。

Linkedlist采用双向队列来实现,对数据的索引需要从列表头开始遍历,所以随机访问效率比较低;但是插入元素时不需要对数据进行移动,因此插入效率较高。同时Linkedlist是非线程安全的容器。

那么在实际使用中,当对数据的主要操作为索引或只在集合的末端增加、删除元素时,使用ArrayList或Vector的效率比较高;当对数据的操作主要为指定位置的插入或删除操作时,Linkedlist效率比较高;当在多线程操作时,Vector效率比较高。

3.HashMap、HashTable、TreeMap和WeakHashMap

HashMap是最常用的一个Map,他根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。由于HashMap和HashTable都采用了hash法进行索引,两者有许多相似之处,它们有以下主要区别。
1.HashMap是HashTable的轻量级实现(非线程安全的实现),它们都完成了Map接口。主要区别在于HashMap允许空(null)键值(key),而HashTable不允许。
2. HashMap把HashTable的contains方法去掉了,改成containsvalue和containskey,因为contains方法容易让人误解。HashTable继承Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
3. HashTable是线程安全的,而HashMap不支持线程同步。
4. HashTable使用Enumeration,HashMap使用Iterator。
5. HashTable和HashMap采用的hash/rehash算法几乎一样,所以性能不会有很大差异。
6. Hash数组的默认大小是11,增加方式是old*2。在Hashmap中默认大小是16,而且一定是2的指数。
7. hash值得使用不同,HashTable直接使用对象的hashCode。

WeakHashMap与HashMao类似,不同在于WeakHashMap的key采用的是“弱引用”方式。只要“WeakHashMap”中的key不再被外部引用,它就可以被垃圾回收器回收。而HashMap中的key采用的是“强引用的方式”,当HashMap中的key没有被外部引用时,只有这个key从HashMap删除后,才可以被垃圾回收器回收。

4.自定义HashMap或HashTable需要注意的地方

在HashMap中添加键值对

0 0
原创粉丝点击