最全Android中需要知道的Java集合框架

作者: 迷途小码农h | 来源:发表于2019-07-09 17:10 被阅读33次

    前言

    子曰:温故而知新,可以为师矣。

    做android已经有好一段时间了,今天突然看到代码中写的各种用来存储数据的ArrayList、管理Activity的LinkedList、用来Retrofit请求数据时多个参数拼接的HashMap。也许使用已经成为了一种习惯,可是使用他的理由又开始在脑海中慢慢淡化了,故写一篇文章来温故 在我们平时的android开发中,常用的java集合框架。

    正文

    这张图已经不陌生了,可是在这么繁琐的java集合框架中,真正在开发中使用的不过也就那几个。所以我们来看下面这张简化图,然后来阐述其中的部分我们常用的:

    1、所有的集合都在 java.util 包下,java的集合几乎是从Collection 和 map这两个接口中派生出来的,而这两个接口又有一些子类(包括子接口和实现类)

    2、List 继承于 Collection,允许元素重复,而且会维护元素顺序;访问时可以通过索引去访问。

    3、Set 也继承于 Collection,保证了元素的唯一性,反之不保证元素的顺序;访问他当中的元素时,只能通过元素本身去访问。

    4、Map 是一个存储键值对的,也就是说你存东西要有钥匙和箱子,你要找到这个箱子就必须有钥匙,就是所谓的 Key - Value;它与Collection没有任何关系

    5、Iterator 我们叫他迭代器,一般用来遍历集合中的元素

    下面我们再来细说一下List、Set、Map中的子类

    List

    上面我们已经说了,List是一个有序的集合。
    List中包括一下几个部分:

    ArrayList

    ArrayList应该是我们在android开发中最最最常用的一个集合了,每一个ArrayList都会有一个初始化容量(10),每次我们add元素的时候,它都会对它的容量进行检测,如果控件不足就会自动对其进行扩容。

    它是数组结构,并且它拥有几个特点: 查找速度快,线程不安全,增删比较慢。

    所有的特点都是相对而言,因为它的查找速度快,我们在列表中的点击事件等都会需要查找集合中的某个元素,然后对其进行操作,这样我们就可以很快的相应点击事件。

    LinkedList

    LinkedList与ArrayList不同,它的实现方式是双向链表,每次查找元素时都要遍历一次,所以它的查找速度就劣于ArrayList。但是由于这个原因它的插入和删除都要快一些,

    那么它的特点是:查找速度慢,线程不安全,增删比较快。

    Vector

    Vector的实现和操作几乎和ArrayList是一样的,唯一一点不同就是 Vector的线程是安全的,所以它的性能没有ArrayList好;这样一来,我们就可以根据其不同的特点去做不同的事情。

    Stack

    Stack继承自Vector,实现一个后进先出的堆栈。它提供了几个额外的方法,使得Vector当做栈使用,这个我本人并没有使用过,如果大家有什么见解可以提出来。

    下面附一张图:

    Set

    包含以下几个:

    HashSet

    HashSet 是一个没有重复元素的集合。它是由HashMap实现的,不保证元素的顺序(这里所说的没有顺序是指:元素插入的顺序与输出的顺序不一致),而且HashSet允许使用null。但是只允许有一个null元素!

    LinkedHashSet

    LinkedHashSet继承自HashSet,其底层是基于LinkedHashMap来实现的,有序,非同步。(LinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。)

    TreeSet

    TreeSet是一个有序集合,其底层是基于TreeMap实现的,非线程安全。TreeSet可以确保集合元素处于排序状态。

    Map

    HashMap

    以哈希表数据结构实现,查找对象时通过哈希函数计算其位置,它是为快速查询而设计的。也是我们最常用的一个Map集合

    LinkedHashMap

    它继承于 HashMap,它保留了输入顺序,所以,如果你要求顺序就使用它。

    TreeMap

    TreeMap 是一个有序的key-value集合,非同步,基于红黑树实现。 它有两种排序方式:一种是自然排序,一种是定制排序,具体取决于使用的构造方法。 这里不做过多的说明。

    补充一张图:

    文章基本上就到这里,文章只是对android开发过程中常用的一些集合框架做一些个人理解的东西,如有地方不对或者有不同理解的可以提出来。

    相关文章

      网友评论

        本文标题:最全Android中需要知道的Java集合框架

        本文链接:https://www.haomeiwen.com/subject/jzkfkctx.html