Java主要数据结构总结
2021-05-14 本文已影响0人
北雁南飞_8854
Collections
数组线性表类ArrayList 和链表类LinkedList
ArrayList用数组存储元素,这个数组是动态创建的。如果元素个数超过了数组的容量,就创建一个更大的数组,并将当前数组中所有的元素都复制到新数组中。
Queue接口
- 插入元素到队尾:
boolean add(E e) —— 插入元素到队尾,如果空间不足,则抛出IllegalStateException异常;
boolean offer(E e)——插入元素到队尾,失败则不抛异常。 - 删除队首元素:
E remove()——移除队首元素,如果队列为空则抛出NoSuchElementException异常;
E poll()——移除队首元素,如果队列为空则返回null。
LinkedHashMap
3 获取队首元素但不删除:
E element()——获取队首元素但不删除,如果队列为 空则抛出NoSuchElementException异常。
Dequeue接口
该接口继承自Queue,并在此基础上扩展了如下方法:
- 插入元素到队首
void addFirst(E e);
boolean offerFirst(E e); - 插入元素到队尾:
void addLast(E e)——等同于add();
boolean offerLast(E e)——等同于offer()。 - 删除队首元素
removeFirst()/E remove()
pollFirst()/ poll() - 删除队尾元素
E removeLast();
E pollLast(); - 获取队首元素,但不删除
E getFirst()——等同于element()
E peekFirst()——等同于peek() - 获取队尾元素,但不删除
E getLast();
E peekLast();
以下是作为Stack的接口
- void push(E e);
插入元素到队首,等同于addFirst()。 - E pop();
移除并返回队首元素,等同于removeFirst()。
使用LinkedHashMap实现LRU的前提是将accessOrder设置为true,以便开启按访问顺序排序模式。
调用put或者get方法时,都会把最近使用的Entry放入到双向列表的末尾。多次操作后,我们便把最近使用的Entry放入到双向列表的后面,多次操作后,双向列表前面的Entry便是最近没有使用过的。这样当节点数满时,删除最前面的Entry即可。