structure de données d'apprentissage du code source java | implémenter une pile avec java à la main

Apprentissage du code source Java du Luban College

Implémenter une pile avec java

La pile présente les caractéristiques et opérations suivantes:

1. Premier entré, dernier sorti

2. Il y a des opérations d'empilage et d'éclatement

Parce que nous ne complétons ces deux fonctionnalités et opérations simples que dans notre démo

code montrer comme ci-dessous:

/**

 * @Author https://www.javastudy.cloud

 * @CreateTime 2019/11/6

 **/

public class StackDemo<E> {

    /** 底层使用一个泛型数组做存储 */

    private E[] items;

    private int top;

    private int capacity;



    public StackDemo() {

        //会调用下面一个构造方法,初始化一个长度为10的数组

        this(10);

    }



    public StackDemo(int i){

        this.capacity=i;

        this.items=(E[])new Object [this.capacity];

        this.top=0;

    }



    /**

     * 入栈操作

     */

    public void push(E e) throws Exception{

        if(top!=capacity){

            items[top++]=e;

            //判断数据是不是已经满了,看需不需要扩容

            resize();

        }else{

            throw new Exception();



        }

    }



    /**

     * 出栈操作

     */

    public E pop() throws Exception{

        if(top==0){

            throw new Exception();



        }else{

            E ret=items[--top];

            items[top]=null;

            return ret;

        }

    }



    /**

     * resize操作,把数组扩大两倍

     */

    public void resize(){

        // 如果top和capacity相等的话,说明满了

        if(top==capacity){

            // 把范围扩大2倍

            this.capacity = this.capacity*2;

            // new一个新数组

            E[] newItems = (E[])new Object [this.capacity];

            // 转移老数据

            System.arraycopy(items,0,newItems,0,items.length);

            // 把新的数组当成底层的存储

            this.items = newItems;

        }

    }



    public static void main(String[] args) {

        StackDemo<String> stack = new StackDemo<>(2);

        try {

            stack.push("first");

            stack.push("second");

            stack.push("third");

            stack.push("four");

            String pop = stack.pop();

            System.out.println(pop);

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

DÉMO 总评

La pile est une structure de données basique et extrêmement importante. Il est non seulement nécessaire de comprendre les caractéristiques de la pile, mais aussi d'avoir la possibilité d'écrire une pile à la main. Au cours du processus d'écriture, vous pouvez remarquer les fosses possibles et les petits détails. , Tels que l'utilisation de System.arraycopy, et les risques dans les situations de multithreading, allez, mon garçon!

Je suppose que tu aimes

Origine blog.csdn.net/LuBanXue/article/details/108761339
conseillé
Classement