你的位置:首页 > Java教程

[Java教程]集合框架基础知识总结


1、为什么使用集合框架

当我们并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象——可以使用Java集合框架

2、Java集合框架包含的内容

接口:(父类)Collection接口下包含List(子类 )接口和Set(子类)接口 L

ist接口下又包含(ArrayList集合实现类和LinkedList集合实现类

) Set接口下又包含(HashSet集合实现类和TreeSet集合实现类)

接口:(父类)Map接口下包含(HashMap集合实现类和TreeMap 集合实现类)

*Collections接口提供了对集合进行排序、 遍历等多种算法实现 *Java集合框架为我们提供了一套性能优良、使用方便的接口和类,它们位于java.util包中

Collection 接口存储一组不唯一,无序的对象

List 接口存储一组不唯一,有序(插入顺序)的对象

Set 接口存储一组唯一,无序的对象 Map接口存储一组键值对象,提供key到value的映射

ArrayList集合和LinkedList集合的优点

1、ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高

2、LinkedList采用链表存储方式。插入、删除元素时效率比较高

List接口提供相应方法remove()、contains(),直接使用即可

ist接口常用方法 :   

    boolean add(Object o)         在列表的末尾顺序添加元素,起始索引位置从0开始

void add(int index,Object o) 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间

int size()                 返回列表中的元素个数

Object get(int index)         返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换

boolean contains(Object o) 判断列表中是否存在指定元素

boolean remove(Object o) 从列表中删除元素

Object remove(int index) 从列表中删除指定位置元素,起始索引位置从0开始

LinkedList的特殊方法

void addFirst(Object o) 在列表的首部添加元素

void addLast(Object o) 在列表的末尾添加元素

Object getFirst()         返回列表中的第一个元素

Object getLast()         返回列表中的最后一个元素

Object removeFirst()         删除并返回列表中的第一个元素

Object removeLast()         删除并返回列表中的最后一个元素

Map接口常用方法:

Object put(Object key, Object val) 以“键-值对”的方式进行存储

Object get (Object key) 根据键返回相关联的值,如果不存在指定的键,返回null

Object remove (Object key) 删除由指定的键映射的“键-值对”

int size() 返回元素个数

Set keySet () 返回键的集合

Collection values () 返回值的集合

boolean containsKey (Object key) 如果存在由指定的键映射的“键-值对”,返回true

Vector和ArrayList的异同:

实现原理相同,功能相同,很多情况下可以互用两者的主要区别如下

Vector线程安全,ArrayList重速度轻安全,线程非安全长度需增长时,Vector默认增长一倍,ArrayList增长50%

Hashtable和HashMap的异同:

实现原理相同,功能相同,在很多情况下可以互用

两者的主要区别如下

Hashtable继承Dictionary类,HashMap实现Map接口

Hashtable线程安全, HashMap线程非安全

Hashtable不允许null值,HashMap允许null值

迭代器Iterator

方法1:通过for循环和get()方法配合实现遍历

方法2:通过迭代器Iterator实现遍历 所有集合接口和类都没有提供相应遍历方法,而是由Iterator实现集合遍历 Collection 接口的iterate()方法返回一个Iterator,然后通过Iterator接口的两个方法可实现遍历

boolean hasNext(): 判断是否存在另一个可访问的元素

Object next(): 返回要访问的下一个元素

泛型集合: 把任何类型对象通过add(Object obj) 放入List中,认为只是Object类型 通过get(int index) 取出List中元素时必须进行强制类型转换,繁琐而且容易出现异常 使用Map的put(Object key, Object value)和get (Object key)存取对象时存在同样问题 使用Iterator的next()方法获取元素时存在同样问题

JDK5.0中通过引入泛型有效的解决了这个问题 JDK5.0使用泛型改写了集合框架中的所有接口和类

2、Collection框架中实现比较,要实现什么接口?

 答案:Comparable/Comparator

 3、ArrayList和Vector的区别?

 答案:这两个类都实现了List接口,都是有序集合,即集合中的元素的位置是有顺序的,可以按位置索引号取出某个元素,并且其中的数据是允许重复的,相当于一种动态的数组。

ArrayList与Vector的区别,这主要包括两个方面:

 (1)同步性: Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。  

(2)数据增长: ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间,每次要增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定的平衡。Vector默认增长为原来两倍,而ArrayList的增长策略在文档中没有明确规定(从源代码看到的是增长为原来的1.5倍)。

ArrayList与Vector都可以设置初始的空间大小,Vector还可以设置增长的空间大小,而ArrayList没有提供设置增长空间的方法。

4、HashMap和Hashtable的区别?

 答案:HashMap是Hashtable的轻量级实现,都实现了Map接口。  主要区别在于HashMap允许空的键和值,而Hashtable不允许。 HashMap是非线程安全的,而HashTable是线程安全的。因此在只有一个线程访问的情况下,效率要高于Hashtable。 HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类,是Java1.2引进的Map接口的一个实现。 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

5、List 和 Map 区别?

答案:一个是存储单列数据的集合,另一个是存储键值对的双列数据的集合,List中存储的数据是有顺序,并且允许重复;Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的。

6、List, Set, Map是否实现Collection接口?

答案:List,Set是,Map不是。

7、List、Map、Set三个接口,存取元素时,各有什么特点?

 答案:List 以特定次序来持有元素,可有重复元素。

Set 无法拥有重复元素,内部排序。

Map 保存key-value值,key不能重复、value可重复。

8、两个对象值相同x.equals(y) == true,但却可有不同的hash code,这句话对不对?

答案:对。  如果对象要保存在HashSet或HashMap中,它们的equals相等,那么它们的hashCode值就必须相等。  如果不是要保存在HashSet或HashMap,则与hashCode没有什么关系了,这时候hashCode不等是可以的,例如ArrayList存储的对象就不用实现hashCode,当然,我们没有理由不实现,通常都会去实现的。

9、说出一些常用的类,包,接口,请各举5个?

 常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer java.util.Date,System,Class,List ,HashMap

常用的包:java.lang java.io java.util java.sql ,javax.servlet,org.apache.strtuts.action,org.hibernate

常用的接口:Remote List Map Document NodeList ,Servlet,HttpServletRequest,HttpServletResponse,Transaction(Hibernate)、Session(Hibernate),HttpSession