总述
集合在我们实际应用中非常普遍,成为一个优秀的程序员了解各个集合的特点是必不可少的。那么首先我们需要明确集合分为单列集合和双列集合
单列集合为Collection集合,双列集合则为Map集合(键-值对形式),它们为同一层级。
下面我们具体进行分析:
一,Collection集合
Collection<E>
├── List<E>
│ ├── ArrayList<E>
│ └── LinkedList<E>
│
└── Set<E>
├── HashSet<E>
│ └─── LinkedHashSet<E>
└──── TreeSet<E>
从上面的代码可以看出,很容易看出它分为List<E>和set<E>,它们是继承了Collection<E>的接口,下面是它们的实现类。
List<E>
实现类分为:
ArrayList<E>
- 基于动态数组实现的List,允许随机访问。
LinkedList<E>
- 基于链表实现的List,便于在列表的开头和结尾进行添加和删除操作。
列表大小变化不大,
作为其他集合的底层实现
作为栈、队列或双向队列的实现: LinkedList 提供了从列表两端插入和删除元素的方法(addFirst(), addLast(), removeFirst(), removeLast()),它非常适合用作栈(后进先出)、队列(先进先出)或双向队列的实现。
内存使用优化:在内存使用方面,如果列表的初始大小未知,或者预期会有很大的变化,LinkedList 可能比 ArrayList 更节省空间,因为 ArrayList 在扩容时可能会分配比实际需要更多的内存空间。
迭代器遍历中的删除操作
Set<E>
set集合整体特点:无序,不重复,无索引
但根据实现类的不同,不同的实现类也会有各自的特点:
HashSet : 无序、不重复、无索引。
LinkedHashSet:有序、不重复、无索引。
TreeSet:排序、不重复、无索引。
应用场景:
HashSet : 去重,快速查找,集合运算
LinkedHashSet:保持插入顺序,去重并保留顺序
TreeSet:去重并排序、范围查找。
二,Map集合
Map<K,V>
├── HashMap<K,V>
│ └── LinkedHashMap<K,V>
└── TreeMap<K,V>
注意:Map系列集合的特点都是由键决定的,值只是一个附属品,值是不做要求的
特点:
HashMap: 元素按照键是无序,不重复,无索引,值不做要求。
LinkedHashMap: 元素按照键是有序,不重复,无索引,值不做要求。
TreeMap:元素按照建是排序,不重复,无索引的,值不做要求。
另一个重要知识点:HashMap底层原理,这里不多作解释,可以自行查阅资料
应用场景:
HashMap: 数据索引和快速查找:
缓存机制:HashMap可以被用作缓存的实现方式,将计算结果缓存在HashMap中,当需要使用时,可以快速获取结果。
键值对存储
LinkedHashMap: 保持元素顺序,有序映射表,LRU缓存(最近最少使用)
TreeMap:需要排序的场景,高效的插入和删除,区间查找等。