JAVA-容器三{容器-单例集合-Stack}JAVA从基础开始 --6

本文介绍了JAVA中的Stack容器,它是Vector的一个子类,遵循后进先出(LIFO)原则。文章详细讲解了Stack的特点和常用操作方法,如empty()、peek()、pop()、push()以及search()。通过示例代码展示了如何使用Stack进行元素的添加、删除及查找,并提供了一个检查字符串对称性的案例。
摘要由CSDN通过智能技术生成

JAVA-容器三{容器-单例集合-Stack}JAVA从基础开始 --6

Stack容器–堆栈容器

Stack是栈容器,是Vector的一个子类(继承了Vector),它实现了一个标准的后进先出(LIFO:Last in Frist Out)的栈

特点

后进先出,通过5个操作方法对Vector做了扩展,允许将向量视为堆栈

操作方法

Modifier and TypeMethod and Description
booeanempty(),测试这个栈如果是空的
Epeek(),看着这个堆栈的顶部的对象有没有从堆栈中删除它,看栈顶元素但不删除
Epop(),删除这个堆栈的顶部的对象,并返回该对象的值函数
Epush(E item)把一个项目到堆栈的顶部
intsearch(Object o),返回基于位置的对象再这个堆栈,如果没有返回-1

源码Test

package top.baokeaia;

import java.util.Stack;

public class StackTest {
    public static void main(String[] args) {
        //实例化栈容器
        Stack<String> s = new Stack<>();

        //添加元素入栈
        String a = s.push("a");
        String b = s.push("b");
        String c = s.push("c");
        //获取元素,必须从顶部开始取
        Boolean dalata = true;
        if(dalata) {
            System.out.println("s.search(b)返回元素所在栈的位置: " + s.search("b"));
            System.out.println("s.search(d)返回元素所在栈的位置: " + s.search("d"));
            System.out.println("s.pop()删除并取出: " + s.pop());
            System.out.println("s.peek()查看并不删除元素: " + s.peek());
            System.out.println("s.pop()删除并取出: " + s.pop());
            System.out.println("empty()判断是否为空栈: " + s.empty());
            System.out.println("s.pop()删除并取出: " + s.pop());
        }
        System.out.println("empty()判断是否为空栈: " + s.empty());
    }
}

案例

package top.baokeaia;

import java.util.Stack;

public class StackTest01 {
    static String str = "...{...[]...}...";

    public static void main(String[] args) {
        Stack<String> s = new Stack<>();

        boolean flag = true;//默认

        int i = str.length();
        int halfi = i / 2;
        boolean Symmetric = i % 2 == 0;
        for (int i1 = 0; i1 < i; i1++) {
            String st = "" + str.charAt(i1);
            if (i1 < halfi) {
                s.push(st);
            } else {
                if (!Symmetric && i1 == halfi) {
                    continue;
                }
                String outSt = s.pop();
                String zh = "" + '[';
                String da = "" + '{';
                outSt = outSt == zh ? "]" : (outSt == da ? "}" : outSt);
                System.out.println(outSt == ("" + '['));
            }

        }

    }
}

后面不成功,因为是在生成String时候,后面就和任何都不相等了,不能做处理,,看到的资料是在char转String的过程,是创建了2个对象,一个是堆栈中的,一个是常量池中的,导致不相等,不能做判断,有小伙伴可以解释下,,已经尝试了 不同方法

改变获取st方式 String st = str.substring(i1,i1+1);
改变了转换方式char o[] = {’[’} — new String(o)–,也找不到相等的值

逆转思维,既然创建的String不能找到相等的字符串,就直接用char类型来做比较

package top.baokeaia;

import java.util.Stack;

public class StackTest01 {
    static String str = "abbcccbba";

    public static void main(String[] args) {
        Stack<String> s = new Stack<>();

        boolean flag = true;//默认

        int i = str.length();
        int halfi = i / 2;
        boolean Symmetric = i % 2 == 0;
        for (int i1 = 0; i1 < i; i1++) {
            char t = str.charAt(i1);
            String st = str.substring(i1, i1 + 1);
            if (i1 < halfi) {
                s.push(st);
            } else {
                if (!Symmetric && i1 == halfi) {
                    continue;
                }
                char outSt = s.pop().charAt(0);
                outSt = outSt == '[' ? ']' : (outSt == '{' ? '}' : outSt);
                if (outSt != t) {
                    flag = false;
                    break;
                }
            }
        }
        if (flag) {
            System.out.println(str + " : 该字符串是对称字符串");
        } else {
            System.out.println(str + " : 该字符串不是对称字符串");
        }
    }
}

在这里插入图片描述
在这里插入图片描述
ok!~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轻动琴弦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值