一、数组
数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。
解析上面的定义:
- 线下表数据接口:表示数据是从前往后只有一个分支,数据只有前后两个方向
- 连续的存储空间:存放数据或者对象引用的地址空间是连续的
- 相同的数据类型:说明每个数据分配的存储空间是相同的
系统是通过内存地址来访问数据,数组的寻址计算由上面解析的定义可以看出是下面的公式:
a[i] = 头地址 + (i * String类型引用的长度)
java和c数组下标是0开始的 如果下标是从1开始那么计算公式如下.可以看出下标0的优势是减少了一次减法运算.
a[i] = 头地址 + ((i-1) * String类型引用的长度)
二、队列
队列:先进先出的数据结构
java中队列可以使用List
List<String> arrayList = new ArrayList<>();
arrayList.add("1");
arrayList.add("2");
if(arrayList.size()>0){
//获取队列头元素
String s = arrayList.get(0);
//移除队列头元素
String remove = arrayList.remove(0);
}
// 遍历
for(String s : arrayList){
System.out.println(s);
}
也可以使用Queue,queue接口中的方法
方法 | 作用 |
---|---|
boolean add(E element) | 将指定的元素添加到队列的末尾,如果成功则返回true,如果队列已满则抛出异常。 |
boolean offer(E element) | 将指定的元素添加到队列的末尾,如果成功则返回true,如果队列已满则返回false。 |
E remove() | 移除并返回队列头部的元素,如果队列为空则抛出异常。 |
E poll() | 移除并返回队列头部的元素,如果队列为空则返回null。 |
E element() | 获取队列头部的元素,但不移除它,如果队列为空则抛出异常。 |
E peek() | 获取队列头部的元素,但不移除它,如果队列为空则返回null。 |
int size() | 返回队列中的元素个数。 |
boolean isEmpty() | 判断队列是否为空。 |
void clear() | 清空队列。 |
Queue<String> queue = new LinkedList<>();
String poll = queue.poll();
String peek = queue.peek();
queue.offer("2");
queue.add("1");
String element = queue.element();
String remove = queue.remove();
int size = queue.size();
boolean empty = queue.isEmpty();
queue.clear();
Deque双端队列
入队列:
方法 | 作用 |
---|---|
void addFirst(E element) | 将指定元素添加到双端队列的头部。 |
void addLast(E element) | 将指定元素添加到双端队列的尾部。 |
void offerFirst(E element) | 将指定元素添加到双端队列的头部,如果成功则返回true,如果队列已满则返回false。 |
boolean offerLast(E element) | 将指定元素添加到双端队列的尾部,如果成功则返回true,如果队列已满则返回false。 |
出队列:
方法 | 作用 |
---|---|
E removeFirst() | 移除并返回双端队列的头部元素,如果队列为空则抛出异常。 |
E removeLast() | 移除并返回双端队列的尾部元素,如果队列为空则抛出异常。。 |
E pollFirst() | 移除并返回双端队列的头部元素,如果队列为空则返回null。 |
E pollLast() | 移除并返回双端队列的尾部元素,如果队列为空则返回null。 |
获取队列元素:
方法 | 作用 |
---|---|
E getFirst() | 获取双端队列的头部元素,但不移除它,如果队列为空则抛出异常。 |
E getLast() | 获取双端队列的尾部元素,但不移除它,如果队列为空则抛出异常。 |
E peekFirst() | 获取双端队列的头部元素,但不移除它,如果队列为空则返回null。 |
E peekLast() | 获取双端队列的尾部元素,但不移除它,如果队列为空则返回null。 |
二、栈
Java标准库中提供的栈:public class Stack<E> extends Vector<E>
方法 | 作用 |
---|---|
Stack() | 构造函数,构造一个空的栈 |
E push(E e) | 将e入栈,并返回e |
boolean add(E e) | 将e入栈,并返回boolean表示成功失败 |
E pop() | 将栈顶元素出栈并返回 |
E peek() | 获取栈顶元素 |
int size() | 获取栈中有效元素个数 (继承自Vector) |
boolean empty() | 检测栈是否为空 |
Stack<String> stack = new Stack<>();
// 判断是否为空
boolean empty = stack.empty();
// 压栈
stack.push("1");
// 压栈
stack.push("2");
//返回栈顶元素,不删除
String peekValue = stack.peek();
// 弹栈
String popValue = stack.pop();
三、链表
LinkedList既实现了queue接口又实现了List, Deque
底层是用链表实现.
方法与上述一致