• java集合之collection


    Collection架构层次关系
    1.Set (不能有重复元素)
    1.1HashSet
    1.1.1LinkedHashSet
    2.List (必须保持元素特定的顺序)
    2.1ArrayList
    2.2Vector
    2.2.1Stack
    2.3LinkedList
     
    3.Queue (保持一个队列(先进先出)的顺序)
    3.1PriorityQueue
    3.2Deque(接口
    3.2.1 ArrayDeque
    3.2.2 LinkedList
     

    1.1HashSet

    关系
    java.util.HashSet ,继承AbstractSet<E> ,实现Set<E>
    原理
    HashSet使用HASH算法来存储集合中的元素,因此具有良好的存取和查找性能。当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据该HashCode值决定该对象在HashSet中的存储位置。 注意:
    HashSet集合判断两个元素相等的标准是两个对象通过equals()方法比较相等,并且两个对象的hashCode()方法的返回值相等

     
    1.1.1 LinkedHashSet
    关系
    java.util.LinkedHashSet, 继承HashSet<E>,实现Set<E>
    原理
    LinkedHashSet集合也是根据元素的hashCode值来决定元素的存储位置。
    但和HashSet不同的是,它同时使用链表维护元素的次序,这样使得元素看起来是以插入的顺序保存的。
    注意:
    当遍历LinkedHashSet集合里的元素时,LinkedHashSet将会按元素的添加顺序来访问集合里的元素。 LinkedHashSet需要维护元素的插入顺序,因此性能略低于HashSet的性能,但在迭代访问Set里的全部元素时(遍历)将有很好的性能(链表很适合进行遍历)

     
    2.1 ArrayList
    关系
    java.util.ArrayList,继承AbstractList<E>,实现List<E>
    原理
    可以动态增长的数组;默认数组的容量为10
    特点:
    • 随机访问速度快,插入和移除性能较差(数组的特点);
    • 支持null元素;
    • 有顺序;
    • 元素可以重复;
    • 线程不安全;
    • ArrayList 扩容1.5倍
    时间复杂度:
    • get() 直接读取第几个下标,复杂度 O(1)
    • add(E) 添加元素,直接在后面添加,复杂度O(1)
    • add(index, E) 添加元素,在第几个元素后面插入,后面的元素需要向后移动,复杂度O(n)
    • remove()删除元素,后面的元素需要逐个移动,复杂度O(n)

     
    2.2 Vector
    关系
    java.util.Vector; 继承AbstractList<E>, 实现List<E>
    原理
    • 底层由一个可以增长的数组组成
    特点:
    • 同步类,每个方法前都有同步锁 synchronized
    • 线程安全
    • 效率比ArrayList低
     

     
    2.2.1 Stack
    关系
    java.util.Stack;继承Vector<E>
    原理
    • 基于Vector实现,线程安全
    特点:
    • 先进后出

     
    2.3 LinkedList
    关系
    java.util.LinkedList; 继承AbstractSequentialList,实现List<E>, Deque<E>
    原理
    基于链表实现的List;同时它还实现Deque接口,即能将LinkedList当作双端队列使用。也可以到对栈来使用
    时间复杂度:
    • get() 获取第几个元素,依次遍历,复杂度O(n)
    • add(E) 添加到末尾,复杂度O(1)
    • add(index, E) 添加第几个元素后,需要先查找到第几个元素,直接指针指向操作,复杂度O(n)
    • remove()删除元素,直接指针指向操作,复杂度O(1)
     

     
    3.1 PriorityQueue
    关系
    java.util.PriorityQueue; 继承AbstractQueue<E>;
    原理
    PriorityQueue的逻辑结构是一棵完全二叉树,存储结构其实是一个数组
    特点:
    PriorityQueue并不是一个比较标准的队列实现,PriorityQueue保存队列元素的顺序并不是按照加入队列的顺序,而是按照队列元素的大小进行重新排序

     
    3.2 Deque(接口)
    关系
    java.util.Deque; 继承Queue<E>
    特点:
    Deque接口代表一个"双端队列",双端队列可以同时从两端来添加、删除元素,因此Deque的实现类既可以当成队列使用、也可以当成栈使用

     
    3.2.1 ArrayDeque
    关系
    java.util.ArrayDeque;继承AbstractCollection;实现Deque<E>
    原理
    基于数组实现
    特点:
    • 默认容量为16

     
    3.2.2 LinkedList
    关系
    java.util.LinkedList; 继承AbstractSequentialList,实现List<E>, Deque<E>
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    HDU1875——畅通工程再续(最小生成树:Kruskal算法)
    CodeForces114E——Double Happiness(素数二次筛选)
    POJ3083——Children of the Candy Corn(DFS+BFS)
    POJ3687——Labeling Balls(反向建图+拓扑排序)
    SDUT2157——Greatest Number(STL二分查找)
    UVA548——Tree(中后序建树+DFS)
    HDU1312——Red and Black(DFS)
    生活碎碎念
    SQL基础四(例子)
    Linux系统中的一些重要的目录
  • 原文地址:https://www.cnblogs.com/gsqc/p/9249167.html
Copyright © 2020-2023  润新知