随笔 - 299  文章 - 0  评论 - 0  阅读 - 6322 

5 Java.util包的框架
util包的框架:常用的集合类主要实现两个“super接口”而来:Collection和Map。

(Java集合类是我们在工作中运用最多的、最频繁的类。相比于数组(Array)来说,集合类的长度可变,更加适合于现代开发需求;)

5.1 Collection
Collection有三个子接口:List, Set和Queue

List特点是元素有序,且可重复。实现的常用集合类有ArrayList、LinkedList,和Vector(线程安全)。

Set特点是元素无序,不可重复。实现的常用集合类有HashSet,LinkedHashSet,TreeSet(可排序)

5.1.1 List
List中主要有ArrayList、LinkedList、Vector三个实现类;

5.1.1.1 ArrayList
ArrayList的实现最简单,采用的顺序表,底层就是一个Object数组,初始容量为10,每当元素要超过容量时,重新创建一个更大的数组,并把原数据拷到新数组中来。

5.1.1.2 LinkedList
LinkedList采用双向链表。集合中的每一个元素都会有两个成员变量prev和next,分别指向它的前一元素和后一元素。

(LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用)

5.1.1.3 Vector
Vector底层实现和ArrayList类似,区别在于在许多方法上加了synchronized关键字,来实现了多线程安全。但代价是性能的降低。由于加锁的是整个集合,所以并发情况下进行迭代会锁住很长时间。

Stack是Vector的一个子类,它实现标准的后进先出LIFO堆栈。

5.1.2 Set
Set和Map有千丝万缕的联系呀。例如HashSet底层实现其实就是一个固定value的HashMap。LinkedHashSet就是一个value固定的LinkedHashMap,TreeSet就是一个value固定的TreeMap。

TreeSet的使用方法总结:

存储特点:有序,不重复;(总结一点:凡是有Tree的集合,都是有序的,凡是有Set的就是不重复的)

方法 说明
public TreeSet() 构造函数:底层创建新的TreeMap
public TreeSet(Collection<? extends E> c) 构造函数:通过集合构造TreeSet
public TreeSet(Comparator<? super E> comparator) 如果Treeset存储的是对象,可以通过对象实现Comparator,实现自定义对象比较器
public boolean add(E e) 添加元素
public E first() 获取首点
public boolean isEmpty() 判断集合是否为空
public E last() 获取最后的值
public boolean remove(Object o) 移除元素
public int size() 当前set容量
boolean containsKey(Object key) 判断该TreeMap中是否包含指定key的映射
… …
备注:The syntax ? extends E means “some type that either is E or a subtype of E”. The ? is a wildcard(通配符).

5.1.3 Queue
队列是一种比较特殊的线性结构。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中最先插入的元素也将最先被删除,对应的最后插入的元素将最后被删除。因此队列又称为“先进先出”(FIFO—first in first out)的线性表,与栈(FILO-first in last out)刚好相反。

Queue接口常用方法:

方法
E add() 增加一个元索 ,如果队列已满,则抛出异常
boolean offer(E e) 添加一个元素并返回true 如果队列已满,则返回false
E remove() 移除并返回队列头部的元素 如果队列为空,则抛出异常
E poll() 移除并返问队列头部的元素 如果队列为空,则返回null
boolean isEmpty() 检测优先级队列是否为空,为空返回true,否则false
… …
队列是一种先进先出的数据结构,没有优先级,众数据平等.但是在某些情况下,我们操作的数据可能带有优先级,出队列时要优先级高的先出,低的后出.在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象.这种数据结构就是优先级队列PriorityQueue.

PriorityQueue的底层使用了堆**(heap)**来实现,而堆实际上就是在完全二叉树的基础上进行了一些元素的调整. (首先,堆结构就是用数组实现的完全二叉树结构; 其次,堆中某个节点的值总是不大于或不小于双亲节点的值)

posted on   杨申龙  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示