Java集合框架类的使用方法总结

来源:互联网 发布:javasql数据库增删改查 编辑:程序博客网 时间:2024/06/05 18:06

 

    本文是对Java集合框架做了一个概括性的总结,目的是对Java集合框架体系有个总体认识,如果你想学习具体的接口和类的使用方法,请参看Java API文档。

一、概述 

    数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法。

    Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类)。所有抽象出来的数据结构和操作(算法)统称为Java集合框架(Java Collection Framework)。

Java程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这些类创建出来一些对象,然后直接应用就可以了。这样就大大提高了编程效率。

    二、集合框架的层次结构

    Collection是集合接口

    |————Set子接口:无序,不允许重复。

    |————List子接口:有序,可以有重复元素。

    区别:Collections是集合类

    SetList对比:

    Set检索元素效率低下,删除和插入效率高插入和删除不会引起元素位置改变

List和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变

    SetList具体子类:

    Set

     |————HashSet:以哈希表的形式存放元素,插入删除速度很快。

         HashSet中的元素没有被排序和分类,如果在遍历集合时不关心集合中元素的顺序,可以使用HashSet

    |————LinkedHashSetSet接口的主要实现类之一,该类按照元素插入顺序排序的,所以如果想保持元素的插入顺序,就使用该实现类

 

    List:允许两个相同的对象放入其中,并且可以根据索引插入和访问列表中的元素

     |————ArrayList:动态数组

        ArrayList是使用数组实现的,可以把它看做是一个可以变长的数组,ArrayList中的元素也是按照索引位置排序的,当需要快速遍历列表的操作时,请使用ArrayList

     |————LinkedList:链表、队列、堆栈。

        LinkedList是使用双链表实现的,列表中的元素按照索引位置排序,当需要进行快速插入和删除操作时,请使用LinkedList

    Arrayjava.util.Vector

Vector是一种老的动态数组(基本上与ArrayList类似,不同的是是线程安全的),是线程同步的,效率很低,一般不赞成使用。当需要线程安全的使用请使用Vector

    三、Iterator迭代器(接口) 

    Iterator是获取集合中元素的过程,实际上帮助获取集合中的元素。

    迭代器代替了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:

    迭代器允许调用方利用定义良好的语义在迭代期间从迭代器所指向的集合移除元素。

    方法名称得到了改进。

    Iterator仅有一个子接口ListIterator,是列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。ListIterator 没有当前元素;它的光标位置 始终位于调用 previous() 所返回的元素和调用 next() 所返回的元素之间。在长度为 n 的列表中,有 n+1 个有效的索引值,从 0 n(包含)。

    四、集合框架之外的Map接口

Map将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射一个值。该接口描述述了不能重复的到值的映射,键和值都是对象

映射中键的集合必须是唯一的,键的集合用Set实现,可以从映射中删除元素,同时关键字和它相关的值将从源映像中被删除,但是不能添加任何元素;entrySet()方法返回一个实现Map.Entry接口的对象集合,集合中每个对象都是底层Map中一个特定的键值对

Map接口是Dictionary(字典)抽象类的替代品。

Map 接口提供三种collection 视图,允许以键集、值集合或键-值映射关系集的形式查看某个映射的内容。映射的顺序 定义为迭代器在映射的 collection 视图中返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;某些映射实现则不保证顺序,如 HashMap 类。

    有两个常见的已实现的子类:

    HashMap:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

TreeMap:它实现SortedMap 接口的基于红黑树的实现。此类保证了映射按照升序顺序排列关键字,根据使用的构造方法不同,可能会按照键的类的自然顺序 进行排序(参见 Comparable),或者按照创建时所提供的比较器进行排序。

Hashtable:此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。

   集合框架中提供了两种常规的Map实现:HashMapTreeMapTreeMap用于实现SortedMap接口。在Map中插入,删除和定位元素,HashMap是最好的选择,但如果要按照自然顺序或自定义顺序遍历键,那么TreeMap则更好。使用HashMap要求添加的键类明确定义了hashCode()equals()方法的实现

    五、线程安全类

在集合框架中,有些类是线程安全的,这些都是JDK1.1中的出现的。在JDK1.2之后,就出现许许多多非线程安全的类。

下面是这些线程安全的同步的类:

    Vector:就比ArrayList多了个同步化机制(线程安全)。

    Statck:堆栈类,先进后出。

    Hashtable:就比HashMap多了个线程安全。

    Enumeration:枚举,相当于迭代器。

    除了这些之外,其他的都是非线程安全的类和接口。

线程安全的类其方法是同步的,每次只能一个访问。是重量级对象,效率较低。对于非线程安全的类和接口,在多线程中需要程序员自己处理线程安全问题。

    六、其他一些接口和类介绍

    DictionaryHashtable类:

    Dictionary提供键值映射的功能,是个抽象类。一般使用它的子类HashTable类。遍历Hashtable类要用到枚举。

Properties

 Properties 继承于 HashtableProperties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。一般可以通过读取properties配置文件来填充Properties对象。

Java集合类的3个部分是接口、实现和算法。所以在最大程度上,一旦理解了接口,就理解了框架,虽然总是要创建接口特定的实现,但访问实际集合的方法应该限制在接口方法的使用上!

原创粉丝点击