Java中的集合框架

1.Java集合的核心接口
Collection:一种基本接口,它定义了一些普通操作,通过这些操作可以将一个对象集合当作一个独立的单元来对其进行存放和处理;
Set:set接口扩展了Collection接口,用来提供集的维护的所需的功能(元素不重复、唯一)。实体类有:HashSet,LinkedHashSet;
SortedSet:SortedSet接口扩展了set接口,用来维护集的所需的功能,实体类有:TreeSet;
List:List接口扩展了Collection接口,用来存放某个元素序列,;实体类有:ArrayList,Vector;LinkedList;
Map:一种基本接口,定义了键值对映射关系维护的操作;实体类有:HashMap,HashTable,LinkedHashMap;
SortedMap:针对以键序排序存放其映射关系的映射,该接口扩展了Map,实体类有:TreeMap
2.Iterator接口
  通过循环输出类集中的元素用迭代器模式(Iterator),也叫游标模式(Cursor),Itreator是一种允许程序员检查容器内元素并实现元素遍历的数据类型,可以完成通过循环输出类集内容,从而获得或者删除元素。常用的方法:boolean hasNext();Object next();void remove();
3.List接口的实现类
(1)LinkedList链表类实现了List接口,允许null元素;除了继承List的方法还有自己的方法,例如:addFirst(),addLast(),getFirst(),removeFirst(),removeLast().这些操作可被用作堆栈(Stack)、队列(queue)或双向队列。
两个构造方法:LinkedList()//建立一个空的链接列表
              LinkedList(Collection c)//建立一个链接列表,由c中的元素初始化
    LinkedList没有同步方法,如果多个线程同时访问一个List,则必须自己实现访问同步,一种解决方法是在创建List使构造一个同步的List。
    List list=Collection.synchronizedList(new LinkedList(....))
(2)ArrayList数组列表类,是一个可变长数组。大小可以动态地增加或减小,可以创建一个原始大小的数组,当超过了大的大小就自动增加,对象删除后就自动减少,允许null。ArrayList没有实现同步。
     构造方法:ArrayList();//建立一个空的数组列表
               ArrayList(Collection c)//建立一个数组列表,由c中的元素初始化
               ArrayList(int i)//建立一个数字列表,该数组有指定的初始容量
(3)Vector存储类,类似于ArrayList,但是Vector是同步的。有Vector创建的Iterator,和ArrayList创建的Iterator是同一个接口。当Iterator被创建且正在被使用是,另一个线程改变了Vector的状态(增加或删除一些元素),由于Vector是同步的,这时调用Iterator的方法将抛出ConcurrentModificationException,因此必须捕获该异常。
  Vector()//创建一个原始大小为10的默认矢量;
  Vector(int size);//创建一个其原始容量有size指定的矢量
  Vector(int size,int incr)//创建一个其原始容量由size指定,且他的增量由incr指定
  Vector(Collection c)//创建一个包含了类集c中元素的的矢量
  创建一个Vector实例化对象,可以使用其方法:addElement()增加一个元素,elementAt()获得指定位置的元素。firstElement()得到矢量的第一个元素,lastElement()获得矢量的最后一个元素,indexOf()和lastIndexOf()方法后的元素的位置(下标),removeElement()或removeElementAt()方法可以删除元素
(4)Stack类
    Stack类继承自Vector,实现一个后进先出的堆栈。只有一个默认构造创建空堆栈Stack();Stack提供了5个额外的方法使得Vector可以当作堆栈使用。Stack有基本的push()、pop()、还有peek()方法用来得到栈顶的元素。empty()可以检测堆栈是否为空。search()方法检测一个元素在堆栈中的位置。
4.Set接口的实现类(常用的类有HashSet和TreeSet)
(1)HashSet,扩展了AbstractSet并且实现了Set接口。该类集使用散列表进行存储。散列表通过使用称之为散列法的机制存储信息,在散列(hashing)中,一个关键字的信息内容被用来确定唯一的值,称为散列码(hash code)。散列码被用来当作与关键字相连的数据的存储下标。关键字到其散列码的转换是自动执行的---看不到散列码本身。
     程序代码不能直接索引散列表。散列法的优点在于大的集合,它允许一些基本的操作,如add(),contains(),remove()和size()方法。
     构造方法如下:HashSet();
                   HashSet(Collection c)
                   HashSet(int capacity)
                   HashSet(int capacity,float fillRatio)
     HashSet没有定义任何超类和接口提供的其他方法。散列集合并不能确定其元素的排列顺序,因为散列法的处理通常不让自己参与创建排序集合
(2)TreeSet类,TreeSet为使用树结构来进行存储的Set接口提供了一个工具,对象按升序存储。访问和检索是很快的。在存储了大量需要进行快速检索的排序信息的情况下,TreeSet是一个很好的选择。构造函数:TreeSet();
                          TreeSet(Collection c)
                          TreeSet(Comparator comp)
                          TreeSet(SortedSet ss)
5.Map映射接口
  Map没有继承Collection接口,它提供了key到value的映射。Map中不能包含相同的Key,每一个key只能映射一个value。Map接口提供3中集合的视图,Map的内容可以别当作一组key集合、一组value集合或一组key-value映射
(1)Hashtable哈希表类
    Hashtable继承Map接口,实现一个key-value映射的哈希表,任何非空的对象都可以当作key或value。添加数据使用put(key,value)方法,取出数据使用get(key)。
    Hashtable通过initial capacity和loader factor两个参数调整性能。通常默认的loader factor0.75较好地实现了时间和空间的均衡,增加loader factor可以节省空间,但相应的查找时间会增大,这会影响像get和put的操作
    Hashtable是同步的。他可以存储重载由Object定义的hashCode()和equals()方法的对象。hashCode()方法计算和返回对象的散列码。当然,equals()方法比较两个对象。
    Hashtable的构造方法如下:Hashtable();
                             Hashtable(int size);
                             Hashtable(int size,float fillRatio);
//该散列表具有size指定的原始大小和由fillRatio指定的填充比介于0.0和1.0之间
                             HashTable(Map m)//创建一个由m中的元素初始化的散列表
(2)HashMap哈希映射类
     HashMap将“键/值”对存储到散列表中。所以HashMap中用于散列和查找的只能是主关键字,其他的次关键字不能用于散列或查找。HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即可有null value和null key。HashMap任然使用哈希函数来计算关键字的哈希码,并存储在对应的位置上,所以记录之间是无序的,但他的存储和查找都很快,远远超过了其他类型的集合。
6.区别:
(1)Hashtable和HashMap的区别:
HashMap是Hashtable的轻量级实现(非线程安全的实现),不是同步的,两者都完成了Map的接口,主要区别在于HashMap允许空键值对,由于其实非线程安全,效率可能高于Hashtable。
HashMap是Java1.2引进的Map interface的一个实现,而Hashtable继承自Dictionary类(字典类)。
Hashtable是线程安全的,即同步(synchronize)的,且不允许空键值对
(2)heap和Stack的区别:
栈是一种线性集合,是自动分配变量以及函数调用时所使用的一些空间。地址是由高到低减少的其添加和删除元素的操作应同步完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素,他是由malloc之类的函数分配的空间所在地,地址是由低到高增长的。
(3)List、Map、Set3个接口存取元素时各有什么特点?
List以特定次序来持有元素,可有重复元素。Set无法拥有重复元素和内部排序(TreeSet)。Map保存key-value值,value可以多指,但是key唯一

你可能感兴趣的:(java)