数据结构之 哈希表 栈 队列
2019-02-16 本文已影响9人
_William_Zhang
哈希表
哈希表 支持 增删改查 四种操作。代码如下
package com.company;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
HashMap<String, String> gender = new HashMap<String, String>(); // 哈希表实现的一个Map , 声明一个哈希表
// 每个人对应的性别
// 增
gender.put("alex", "male");
gender.put("frank", "female");
// 查
if (gender.containsKey("alex")) { //先判断存在不存在
System.out.println(gender.get("alex")); //存在则读取
}
String result = gender.get("alex");
if (result != null) {
System.out.println(result);
}
// 改 和增是一样的 ,只是同样的键值会覆盖
gender.put("frank", "male");
//删
gender.remove("frank");
}
}
哈希表的特性:
增加, 查询, 修改 和 删除操作的时间复杂度都近似于 O(1) , 也不依赖于插入的顺序. 也就是随机访问(想访问哪个数据就马上访问哪个数据!)存储在哈希表里的数据没有顺序!!! 不可以对哈希表进行排序
栈
一个数据结构, 用于存储数据. 支持两种操作:
插入数据 (push);
取出数据 (pop); 获得数据, 同时把数据从栈中删除
所有操作的时间复杂度度为O(1)
最重要的是, 哈希表可以随机访问. 但是栈对数据的访问顺序有规定. 遵循一个规则: 先进后出, 后进先出. 也就是只能访问当最近放进到栈里面的那个数据!
代码如下:
package com.company;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<Integer>();
stack.push(3);
stack.push(5);
System.out.println(stack.pop()); // 5
System.out.println(stack.pop()); // 3
// 深度优先搜索 本质上就是栈的使用
// 只看顶部数据,但是不删除
stack.peek();
//检查是否为空
stack.empty();
}
}
队列
一个类似于栈的数据结构, 用于存储数据, 同样支持两种操作:
插入数据 (add);
取出数据 (poll); 获得数据, 同时从队列中删除
所有操作的时间复杂度为O(1)
队列遵循一个规则: 先进先出, 后进后出. 也就是从队列中取出数据的顺序和放进去的顺序是一样的!
遇到这种描述方式的时候, 尝试使用接口! 抽象数据类型
代码如下:
package com.company;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
//队列
Queue<Integer> queue = new LinkedList<Integer>(); //因为 LinkedList类 实现了 Queue接口
queue.add(3);
queue.add(5);
System.out.println(queue.poll()); // 3
System.out.println(queue.poll()); // 5
Integer first_of_queue = queue.peek();
//检查是否为空
queue.isEmpty();
}
}