首页

欢迎访问

Java集合框架简介

发布时间:2016-12-13 23:36:48

Collection
----List
--------LinkedList
--------ArrayList
--------Vector
------------Stack
----Set
Map
----Hashtable
----HashMap
----WeakHashMap

上述所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含 hashNext(),next(),remove()三种方法。
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。由Collection接口派生的两个接口是List和Set。


1)、列表  List接口(继承于Collection接口)及其实现类 
   List接口及其实现类是容量可变的列表,可按索引访问集合中的元素。 

   特点:集合中的元素有序、可重复; 

   列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。

   实现类: 
   ArrayList  实现一个数组,它的规模可变并且能像链表一样被访问。它提供的功能类似Vector类但不同步,它是以Array方式实现的List,允许快速随机存取。 
   LinkedList实现一个链表,提供最佳顺序存取,适合插入和移除元素。由这个类定义的链表也可以像栈或队列一样被使用。提供最佳顺序存取,适合插入和移除元素。

2)、集 Set接口(继承于Collection接口)及其实现类 
    特点:集合中的元素不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。
          对Set中成员的访问和操作是通过Set中对象的引用进行的,所以集中不能有重复对象。
          Set也有多种变体,可以实现排序等功能,如TreeSet,它把对象添加到集中的操作将变为按照某种比较规则将其插入到有序的对象序列中。
          它实现的是SortedSet接口,也就是加入了对象比较的方法。通过对集中的对象迭代,我们可以得到一个升序的对象集合。
    
    实现类: 
    HashSet 能够快速定位一个元素,要注意的是:存入HashSet中的对象必须实现HashCode()方法; 
    TreeSet 将放入其中的元素按序存放。 
 
3)、映射 Map接口及其实现类 
    Map是一个单独的接口,不继承于Collection。Map是一种把键对象和值对象进行关联的容器。 
    特点:key不允许重复。 
    映射与集或列表有明显区别,映射中每个项都是成对的,Map是把键对象和值对象进行关联的容器。
    映射中存储的每个对象都有一个相关的关键字(Key)对象,关键字决定了对象在映射中的存储位置,
    检索对象时必须提供相应的关键字,就像在字典中查单词一样。关键字应该是唯一的,
    也就是说Map中的键对象不允许重复,这是为了保证查询结果的一致性。
    关键字本身并不能决定对象的存储位置,它需要对过一种散列(hashing)技术来处理。
    
    实现类: 
    HashMap 实现一个键到值映射的哈希表,通过键取得值对象,没有顺序,通过get(key)来获取value,允许存储空对象,而且允许键是空(由于键必须是唯一的,当然只能有一个); 
 
    HashTable 实现一个映象,所有的键必须非空。为了能高效的工作,定义键的类必须实现hashcode()方法和equal()方法。这个类是前面java实现的一个继承,并且通常能在实现映象的其他类中更好的使用。当元素的顺序很重要时选用TreeMap,当元素不必以特定的顺序进行存储时,使用HashMap。Hashtable的使用不被推荐,因为HashMap提供了所有类似的功能,并且速度更快。当你需要在多线程环境下使用时,HashMap也可以转换为同步的。Properties 一般是把属性文件读入流中后,以键-值对的形式进行保存,以方便读取其中的数据。 
 
4)、Iterator接口 
    Iterator接口位于java.util包中,它是一个对集合进行迭代的迭代器。 
    集合容器(如:List、Set、Map等)本身提供了处理元素置入和取出的方式,但是单一选取元素的方法很受限制。
    所以我们要用Iterator去选取容器中的元素,它将容器转换成一个序列。 


面试题:
1.Collection、Set和List的区别? 
    Collection对象之间没有指定的顺序,允许有重复元素和多个null元素对象;它是Set和List接口的父类,是一种最通用型的集合接口; 
    Set各个元素对象之间没有指定的顺序,不允许有重复元素,最多允许有一个null元素对象; 
    List各个元素对象之间有指定的顺序,允许重复元素和多个null元素对象; 
    
2.LinkedList,ArrayList,Vector,Stack,Queue区别?NodeList区别?
    1)LinkedList链式访问,以指针相连,适合于在链表中间需要频繁进行插入和删除操作。
    2)ArrayList类似数组的形式,按照序号存储,随机访问速度非常快。
    3)Vector向量按照各元素序号存储,数组大小可以动态增长,对于大容量数据存储效率较高。
    4)Stack堆栈,先进后出的数组。
    这些类的对比与选择:
    如果涉及到堆栈队列等操作,应该考虑List中的stack,queue
    对于需要快速插入删除元素,应该使用linkedlist
    如果需要快速随机访问元素,应该选用arraylist
    如果程序在单线程环境中,选用非同步类
    如果在多线程中,选用同步类vector、stack和hashtable以及其子类。
 
3.ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?
  Vector和HashTable是线程同步的(synchronized)。性能上,ArrayList和HashMap分别比Vector和Hashtable要好。

4.java集合的体系结构
   A:List、Set、Map是这个集合体系中最主要的三个接口。
      其中List和Set继承自Collection接口。
      Set不允许元素重复。HashSet和TreeSet是两个主要的实现类。
      List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。
      Map也属于集合系统,但和Collection接口不同。Map是key对value的映射集合,其中key列就是一个集合。key不能重复,但是value可以重复。HashMap、TreeMap和Hashtable是三个主要的实现类。
 

我要评论+
评论列表