简述Java集合框架

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

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



Java_Collection

1    Collection接口

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

        它的定义如下:     public interface Collection<E> extends Iterable<e>

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

Collection_Methods

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

1.1    List接口

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

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

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

List_Methods

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

1.1.1    ArrayList

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

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

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

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

ArrayList_API

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

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

ArrayList_Methods

1.1.2    Vector

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

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

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

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

Vector_API

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

Vector_methods

1.1.3    LinkedList

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

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

        注意,此实现不同步

        它的常用构造方法:

LinkedList_API

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

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

HashSet

1.2.2    TreeSet

TreeSet

2    Iterator接口

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

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

3    Map接口

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

        Map 是将键映射到值的对象. 映射不能包含重复的键; 每个键最多可以映射一个值.

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

        注意如果将可变对象用作映射键,则必须非常小心

        它的常用方法如下:

Map Methods

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

3.1    HashMap

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

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

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

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

        常用构造方法:

HashMap

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

HashMap_methods

3.2    TreeMap

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

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

        常用构造方法有:

TreeMap

        TreeMap的方法较多, 如下:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353