介绍Java中的Collection FrameWork及如何写自己的数据结构。
Collection
├ List
│ ┝ LinkedList
│ ┝ArrayList
│ ┗Vector
│ ┗Stack
┗Set
Map
┡Hashtable
┡HashMap
┗WeakHashMap
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Element);Map提供Key到value的映射。
List、Set、Map是否继承Collection接口。
List、set 是;Map不是。
集合类有哪些?简述一下主要方法。
最常用的集合类是List和Map。List的具体实现包括ArrayList和Vector,它们是可变大小的列表,比较适合构建、储存和操作任何类型对象的元素列表。List适用于按数值素引访问元素的情形。Map提供了一个更通用的元素储存方法。Map集合元素用于储存元素对(称作“键”和“值”),其中每个键映射到一个值。
说出ArrayList、Vector、LinkedList的储存性能和特性。
ArrayList和Vector都是使用数组方式储存数据,此数组元素数大于实际储存的数据以便增加和插入数据,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized 方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现储存,按序号索引数据需要进行前项或后项遍历,但是插入数据时只需要记录本项的前项即可,所以插入速度较快。
Collection和Collections的区别。
Collection是java.util下的接口,它是各种集合的父类接口,继承于它的接口主要由Set和List;Collections是个java.util下的类,是针对集合的帮助类,提供一系列的静态方法实现对各种集合的搜索、排序、县城安全化的操作。
HashMap和Hashtable的区别。
二者都实现了Map接口,是将唯一键映射到特定的值上;主要区别在于:
HashMap没有排序,允许一个null键和多个null值,而Hashtable不允许;
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey,因为contains方法容易让人引起误解;
Hashtable继承自Dictionary类,HashMap是Java1.2引进的Map接口的实现;
Hashtable的方法是synchronized的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。
HashMap和Hashtable采用的Hash、reHash算法大致一样,所以性能不会有很大的差异。
ArrayList与Vector区别。
同步性:Vector是线程安全的(同步),而ArrayList是线程不安全的;
数据增长:当需要增长时,Vector默认增长一倍,而ArrayList却是一半。
List、Map、Set三个接口,存取元素时各有什么特点。
List以特定次序来持有元素,可有重复元素;
Set无法拥有重复元素,内部排序(不可重复);
Map以Key-Value值保存,Value可多值。
Set里的元素是不能重复的,那么用什么方法来区分是否重复呢(是用==还是equals())?它们有何区别?
Set里面的元素是不能重复的,用equals()方法来区分重复与否。覆盖equals()方法用来判断对象的内容是否相同,而“==”判断地址是否相等,用来解决引用值是否指向同一对象。