美文网首页
Java集合框架

Java集合框架

作者: 阿豪puls | 来源:发表于2019-10-25 14:37 被阅读0次

    集合分为Collection和Map两种体系

    Collection接口:单列数据,定义了一组存取对象的方法的集合

    • List接口:元素有序,可重复的集合
    • Set接口:元素无序,不可重复的集合
    Collection接口继承图

    Map接口:双列数据,保存具有映射关系,key-value对的集合

    Map接口继承图

    集合

    开发中集合的选择

    • List集合
      如果需要保留存储顺序并保存重复元素,推荐使用List集合
    • ArrayList: 若查询较多,推荐使用ArrayList
    • LinkedList:若存取较多,推荐使用LinkedList
    • Vector:若需要线程安全,推荐使用Vector,但开发中一般由程序员来实现集合的线程安全,不常用
    • Set集合
      如果不需要保留存储顺序并需要去除重复的元素,推荐使用Set集合
    • HashSet:若不需要排序时,推荐使用HashSet,HashSet比TreeSet效率高
    • TreeSet:若需要将元素排序,推荐使用TreeSet
    • LinkedHashSet:若需要保留存储顺序,又需要去除重复元素,推荐使用LinkedHashSet

    List接口

    是用于有序存储可重复元素的集合
    List接口继承了Collection接口,声明有序存储对象(对象可重复)功能的公共接口

    ArrayList
    • 数组实现,查找快,增删慢
    • 由于是数组实现,在增加或删除时,会牵扯到数组扩容以及元素的拷贝,所以效率慢,数组是可以直接按索引查询,所以查询的时候,较快
    LinkedList
    • 链表实现,增删快、查询慢,由于链表实现:
      1、增加时只要让前一个元素记住自己就可以了
      2、删除时,让前一个元素记住后一个元素,后一个元素记住前一个元素,这样增删效率比较高
      3、查询时需要一个一个的遍历,效率比较低
    Vector
    • 基于数组实现的,线程同步的遗留集合类,
    • 和ArrayList原理相同,但线程安全,效率比较低,一般来讲,线程安全的东西,效率有点影响
    Stack
    • 栈(stack)是一种后进先出(LIFO)的集合类型, 即后来添加的数据会先被删除
    • 可以将其类比于下面文件的取放操作:新到的文件会被先取走,这使得每次取走的文件都是最新的
    • 实现栈有以下2种方式
      1、用数组实现栈
      2、用链表实现栈
    image.png
    Queue
    • 队列属于一种遵循先进先出(FIFO)原则的集合类型
    • 可以将其类比为生活中一些以公平性为原则的服务场景:排成一排的客户等待服务,等待最久即最先入列的客户应该最先提供服务(出列)
    • 实现队列有以下2种方式
      1、用链表实现队列
      2、用循环数组实现队列
    image.png

    栈遵循后进先出的原则,所以要在数组或链表同一端做添加和删除操作
    队列遵循先进先出的原则, 所以要在数组或链表的两端分别做插入和删除的操作

    Set接口

    • Set接口继承了Collection接口,声明无序存储对象(对象不可重复)功能的公共接口,不能通过索引方式获取
    • Set接口的实现类,判断两个对象是否相等,不是通过 ==运算符,而是根据equals()方法比较
    • 由于集合元素是不可重复的,如果试图把一个对象存放在Set容器中时,对应的类必须重写equlas()方法和hashCode(Object obj)方法,以实现对象相等规则,插入元素时会进行hash验证
    HashSet
    • HashSet无序不可重复
    • HashSet不是线程不安全
    • 基于hash算法来存储集合中的元素,因此具有很好的存取、查找、删除性能
    LinkedHashSet
    • LinkedHashSet有序不可重复
    • LinkedHashSet是HashSet的子类
    • LinkedHashSet根据元素的hashCode值来决定元素的存储位置,但它同时使用双向链表维护元素的次序,这使得元素看起来以插入顺序保存的
    • LinkedHashSet插入性能略低于HashSet,但在迭达访问Set集合元素时有不错的表现
    TreeSet
    • TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态
    • TreeSet底层使用红黑树结构存储数据
    • TreeSet有两种排序方式:自然排序、定制排序
    • 如果试图把一个对象添加到TreeSet集合时,则该对象的类必须实现Comparable接口

    Map接口

    • Map接口用于保存映射关系的数据,key-value
    • Map中的key和value,可以是任何引用类型的数据
    • Map中的key是用Set存放的,不允许重复,即作为key的类,一定要重写hashCode()和equals()方法
    • 一般常用String类型,作为Map集合中的key
    HashMap
    image.png
    LinkedHashMap
    image.png
    TreeMap
    image.png
    Hashtable
    image.png
    Properties
    image.png

    相关文章

      网友评论

          本文标题:Java集合框架

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