java dvd集合框架_简述Java集合框架

在简述Java集合之前,我们首先应该明白,Java类集的设置目的。我们面向对象的开发,多用对象数组,而对象数组的最大问题在于数组中的元素是固定的,不能动态扩容。在早期,我们通过链表来实现一个动态对象数组。但这样依旧很复杂,为了方便用户操作各个数据结构,便引入了类集。我们可以把类集称为Java对数据结构成熟的实现。

Java 集合框架(如图)实现了线性表、链表、哈希表这几类数据结构,为我们在程序开发时提供了便捷。Java集合框架主要分为三部分:Collection、Iterator、Map。该文主要对这三部分进行简述。

78b1a109cdae

Java_Collection

1    Collection接口

首先,我们先说Collection接口。Collection接口是在整个java类集中保存单值最大操作父接口,里面每次操作的时候都只能保存一个对象数据。

它的定义如下:     public interface Collection extends Iterable

它的常用方法有一下几种:

78b1a109cdae

Collection_Methods

Collection接口包含上述方法,但在开发中不会直接使用这个接口,而是使用它的子接口:List; Set。 两个子接口都继承了上述方法。

1.1    List接口

在整个集合中List是Collection的子接口,里面的内容都是允许重复的。

List子接口的定义:    public interface List extends Collection

此接口依然使用泛型技术,接口的方法在Collection方法上进行了重写或重载用以扩充。它的方法除了继承自Collection的方法, 还有以下几种扩充:

78b1a109cdae

List_Methods

而List接口也有三个较为常用的实现类:ArrayList (95%)    Vector (4%)    LinkedList (1%)

1.1.1    ArrayList

ArrayList是List接口的可调整大小的数组列阵实现。

此外,除了实现List接口之外,此类还提供了一些方法来操作内部用于存储列表的数组的大小。

另需注意的是:此实现是不同步的。

根据API可知,它的常用构造方法有3中:

78b1a109cdae

ArrayList_API

注意:在使用默认的构造方法时,构造的初始容量为10,并不是一new出来就是10,而是在进行首次添加时,会将刚new出来得到,长度为0的空列表的长度修改成默认的10。请查看以下源码:

78b1a109cdae

ArrayList实现类实现List接口的方法基础上,进行了方法重载和重写,有了一下扩充:

78b1a109cdae

ArrayList_Methods

1.1.2    Vector

Vector类实现了可增长的对象数组. 像数组一样, 它包含可以使用整数索引访问的组件. 但是, Vector的大小可以根据需要增大或缩小, 以便在创建Vector后添加和删除项目.

注意,迭代器的快速失败行为无法得到保证,因为一般来说,在存在不同步的并发修改时,不可能做出任何硬性保证。

与新的集合实现不同, Vector是同步的。 如果不需要线程安全实现,建议使用ArrayList代替Vector 。

它的常用构造方法有3中:

78b1a109cdae

Vector_API

此实现接口,很多方法都与ArrayList的方法重复,ArrayList能用的方法, Vector也可以用.。此外,Vector还在List接口的基础上进行了方法的重载, 扩充了以下方法:

78b1a109cdae

Vector_methods

1.1.3    LinkedList

双链表实现了List和Deque接口。实现所有可选列表操作,并允许所有元素(包括null )。

对于双向链表,所有操作都可以预期。 索引到列表中的操作将从开头或结尾遍历列表,以较接近指定索引为准。

注意,此实现不同步

它的常用构造方法:

78b1a109cdae

LinkedList_API

此接口实现,实现了List和Deque中的大部分方法,并对一部分方法进行重写,还进行了方法的重载,扩充了以下几种方法:

78b1a109cdae

LinkedList Methods

由于本次没有介绍Deque接口,在此对LinkedList实现类中对于Deque接口的实现进行了详细罗列。

1.2    Set

不包含重复元素的集合。 更正式地说,集合不包含元素对e1和e2 ,使得e1.equals(e2)和最多一个null元素.

此接口模拟数学 集 抽象.

注意:如果将可变对象用作set元素,则必须非常小心. 是因为Set的某些子类在存储时, 是无序的。

Set接口扩展于Collection接口,在一个实现Set的类中必须确保该规则集没有相同的元素。Set接口中有三个具体类:散列集HashSet、链式散列集LinkedHashSet和树形集TreeSet。常用具体类为HashSet和TreeSet

1.2.1    HashSet

78b1a109cdae

HashSet

1.2.2    TreeSet

78b1a109cdae

TreeSet

2    Iterator接口

Iterator接口提供了为不同类型集合中的元素进行遍历的统一方法。通过Collection接口中的iterator方法可以返回一个Iterator接口的实例(迭代器)。该实例可以通过hasNext()方法检测迭代器中是否有更多的元素,next()方法顺序访问集合的元素等。

注:java集合框架中的所有具体类中都实现了Cloneable和Serializable接口,因此它们的实例都是可复制且可序列化的。

78b1a109cdae

3    Map接口

Map(Mapping)接口定义:     public interface Map    //K - 此映射维护的密钥类型; V - 映射值的类型

Map接口提供了三个集合视图, 这些视图允许将映射的内容视为一组键, 值集合或键值映射集. 映射的顺序被定义为其中在映射上的集合视图迭代返回元素的顺序.

它的常用方法如下:

78b1a109cdae

Map Methods

Map的几个具体实现子类,继承了Map的这些方法, 并在此基础上进行了扩展。

3.1    HashMap

基于哈希表的Map接口的实现。 此实现提供了所有可选的映射操作,并允许null值和null键。 (  HashMap类大致相当于Hashtable ,除了它是不同步的并且允许空值)此类不保证映射的顺序; 特别是,它不保证顺序会随着时间的推移保持不变。

HashMap的实例有两个影响其性能的参数: 初始容量和负载因子 。  容量是哈希表中的桶数,初始容量只是创建哈希表时的容量。  加载因子是在自动增加容量之前允许哈希表获取的完整程度的度量。

作为一般规则,默认加载因子(0.75)在时间和空间成本之间提供了良好的折衷。

注意,使用具有相同hashCode()许多键是减慢任何哈希表性能的可靠方法。 为了改善影响,当键为Comparable时,此类可以使用键之间的比较顺序来帮助打破关系。

常用构造方法:

78b1a109cdae

HashMap

常用方法在实现Map方法的基础上,扩充了一下方法:

78b1a109cdae

HashMap_methods

3.2    TreeMap

基于红黑树的NavigableMap实现。 该地图是根据排序natural ordering其密钥,或通过Comparator在地图创建时提供,这取决于所使用的构造方法。

请注意,如果此有序映射要正确实现Map接口,则树映射维护的排序(如任何已排序的映射,以及是否提供显式比较器)必须与equals一致  。

常用构造方法有:

78b1a109cdae

TreeMap

TreeMap的方法较多, 如下:

78b1a109cdae

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值