Java--容器概述

tech2024-07-30  56

文章目录

一、容器概述Collection1.List2.Set3.Queue Map1.HashMap2.HashTable3.TreeMap4.LinkedHashMap 二、适配器模式

一、容器概述

容器主要分为Collection和Map两种,Collection是对象的集合,而Map是存储着键值对(两个对象)的映射表。

Collection

Collection是对象的集合,继承了Iterable。

说明Collection支持快速失败机制(fail - fast),涉及到modifyconcurrentException这个经典的异常。

1.List

ArrayList:底层基于动态数组实现,支持随机访问。LinkedList:底层基于双向链表实现。一般可以用作双向队列Vector:底层基于数组实现,是线程安全的List,里面方法都用synchronized修饰。(Vector一定线程安全吗?)

2.Set

HashSet:底层基于哈希表实现,查找元素的时间复杂度为O(1),但是会丢失元素的顺序性,也就是说通过Iterator遍历Hashset的结果的顺序可能会与加入元素HashSet的元素顺序不同。TreeSet:基于红黑树实现,支持有序性操作,但是查找效率不如HashSet,TreeSet为O(logN)。

3.Queue

LinkedList: 用LinkedList来实现双向队列PriorityQueue:基于堆结构实现,用它来实现优先队列。

Map

Map是key - value的一种数据结构,主要有以下几个实现类:

1.HashMap

基于哈希表实现,具体可看笔记。

2.HashTable

基于哈希表实现,是线程安全的HashMap,里面的方法都用synchronized来修饰,在JDK1.6的时候对锁进行了很大的优化,但是建议在并发环境下还是使用concurrentHashMap。

3.TreeMap

TreeMap基于红黑树来实现的。

4.LinkedHashMap

因为HashMap是会丢失加入的元素的顺序性,因此LinkedHashMap是使用双向链表来维护元素的加入顺序,一般用来实现LRU缓存。

二、适配器模式

可以看到Collections实现了Iterable接口,而Iterable接口提供了一个产生Iterator对象的方法,使用Iterator对象则可以遍历元素,和使用forEach:

List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); for (String item : list) { System.out.println(item); }
最新回复(0)