数据结构之 哈希表 栈 队列

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();
    }
}

上一篇下一篇

猜你喜欢

热点阅读