• 容器理解


     

    目的:

    如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序。通常,对象的数量只有在运行期才能确定,生命周期更是难于把握。

    为解决这个问题,JAVA提供了容器类机制。容器的设计总是编程语言要解决的根本性问题。

     

    基本概念:

        容器类相当于集合,用来保存一组对象。基本类型包括List, Set, Queue和Map,要注意,这几个都是接口。

     

    实现机制:

    容器类图如下所示:

    上图中,空心箭头的虚线表示一个类实现了某个接口,实心箭头的虚线表示某个类可以生成箭头所指向的类的对象。粗线框表示常用的容器类,实线表示普通类,虚线表示接口。

     

    List:按序列保存对象的接口。

        接口方法:增add()、删remove()、改set()、查indexOf() get()

        ArrayList:底层基于数组的List接口的实现,长于随机访问,但是插入和删除较慢

        LinkedList:底层基于链表的List接口的实现,长于插入和删除,但是随机访问较慢

     

    Queue:一个先进先出 (FIFO) 的接口。

        接口方法:增add() offer()、删remove() poll()、查改element() peek()

        LinkedList:包装了LinkedList内部的某些方法。

        PriorityQueue:底层基于实现的优先级队列,需要Comparator<T>接口定义对象间的比较规则。

     

    Set:保存不重复对象的接口,离散数学中的集合。

        接口方法:增add()、删remove()、改[通过查找更改引用的值]、查get()

        TreeSet:底层基于红黑树实现基于比较的升序Set,同样通过Comparator接口。

        HashSet:底层基于散列函数,实现元素对象的O(1)复杂度的查找。

        LinkedHashSet:底层基于散列函数,并且用链表维护元素的插入顺序。

     

    Map:保存由<键, 值>对组成的对象的集合,允许用来查找值。Map可看作是由键、值两个Set和映射表构成。

        接口方法:增put(K,V)、删remove()、改[通过查找更改引用的值]、查get()

        特殊方法:keySet()方法返回包含键的Set对象

    TreeMap:基于红黑树的Map接口的实现,实现按主键升序的<K,V>键值对保持。

    HashMap:基于键的哈希表的Map接口的实现,实现元素对象的O(1)复杂度的查找。

        LinkedHashMap:用链表维护<K,V>的插入顺序。

        

     

    迭代器Iterator<E>接口:

    目的:向上层系统封装底层容器的实现细节。例如,一个底层容器为List,随着业务的复杂,发现用Set更为合适,这样上层所有的调用细节都会发生改变。如果使用迭代器面向上层服务,则可扩展性更好。

    接口方法:

        hasNext():测试是否有下一个元素

        next():游标移向下一个位置

        remove():移除next()操作前的上一个位置的元素

    一个类通过实现Iterable<T>接口获得Foreach调用的能力。

  • 相关阅读:
    eventbus 备注
    Retrofit 备注
    RxJava 备注
    dagger2 备注
    JVM 备注
    UI控件(UIPickerView)
    Android 知识杂记(MVP模式)
    UI控件(UIToolbar)
    UI控件(UIAlertController)
    UI控件(UIScrollView)
  • 原文地址:https://www.cnblogs.com/zjgtan/p/3321684.html
Copyright © 2020-2023  润新知