Java集合笔记

类集:数据结构                                迭代器:最优的接触方式

  1. 链表(Linked List):在一个对象中存入其前一个或后一个对象以达到相互连接的链表。其对象本身无需相连。抽象数据类型。

优点:1. 无限的存 2. 插入删除迅速(常数时间)

缺点:查找速度慢

单向,双向,单向循环,双向循环。

  1. 二叉树(Binary Tree):对于有序数据在一个对象中把比它小的对象存入左边,把比他大的对象存入右边以达到相互连接的树状结构。

优点:易于查找,与二分查找相同。

  1. 栈:先进后出
  2. 队列:先进先出

Collection 接口:List, Set 是其子接口

  • List 接口:数据允许重复(ArrayList (95%)、Vector(4%)、LinkedList(1%))
    • ArrayList:数组结构。增删慢,查找快。存满设定的容量自动扩容。
    • Vector:多线程安全,其余基本与ArrayList相同。
    • LinkedList:双向链表结构,增删快,查找慢。可当做栈或队列
      • 模拟栈结构:push()存入, pop()取出。
      • Set 接口:无序,不包含重复元素,模拟数学集。获取元素通过迭代器或转为数组。
        • HashSet:散列存放(哈希表)利用HashMap进行单值存储。
        • TreeSet:二叉树存储,按照ASCII排序。基于TreeMap。使用方法与HashSet相似。存储自定义类时可重载hasHash()或实现Comparable接口以自定义此类的排列顺序。如果compareTo()返回0则不会存入此变量。

Map(Mapping映射)集合存储一个键值和一个数据。通过键来找数据。键不可重复。Set利用此点实现其数据不可重复。keySet() 把所有键提出存为Set

  • HashMap, HashTable, ConcurrentHashMap:对象数组+链表 Object.hashCode % 桶数量,按余数存入桶。每个桶初始为链表,若数据量大于8,从链表转为红黑二叉树以便查找,若数据量又再次小于等于6,从红黑二叉树转为链表。初始桶数量为16,散列因子为0.75(若有75%的桶存有数据,桶的数量变为两倍)。初始容量和负载因子时主要影响其性能的元素。初始容量须合理安排,避免频繁散列,重复创建HashMap。散列因子越大,容量越省,性能越低。作为键存入的变量不可重复修改.
  • TreeMap
  • LinkedHashMap:同时存入HashMap和一个LinkedList

Iterator 迭代器:对Collection下所有子类进行处理。指针。

            ListIterator:对 List 下所有子类进行处理。

                        add() 在指针前一个下标添加。 set() 在当前指针下标修改。

forEach:用于迭代数组或集合,使用迭代器来遍历。

HashMap, HashTable, ConcurrentHashMap 区别在于多线程,线程安全与否。

HashMap:同一容器,效率高,线程不安全。

HashTable:线程安全,排队操作,效率低。

ConcurrentHashMap:采用分段锁机制,保证线程安全,效率较高。每个桶分别排队。

posted @ 2021-02-01 05:06  Aisebil  阅读(10)  评论(0)    收藏  举报