Java集合笔记
类集:数据结构 迭代器:最优的接触方式
- 链表(Linked List):在一个对象中存入其前一个或后一个对象以达到相互连接的链表。其对象本身无需相连。抽象数据类型。
优点:1. 无限的存 2. 插入删除迅速(常数时间)
缺点:查找速度慢
单向,双向,单向循环,双向循环。
- 二叉树(Binary Tree):对于有序数据在一个对象中把比它小的对象存入左边,把比他大的对象存入右边以达到相互连接的树状结构。
优点:易于查找,与二分查找相同。
- 栈:先进后出
- 队列:先进先出
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:采用分段锁机制,保证线程安全,效率较高。每个桶分别排队。

浙公网安备 33010602011771号