JAVA-容器三{容器-单例集合-Stack}JAVA从基础开始 --6
Stack容器–堆栈容器
Stack是栈容器,是Vector的一个子类(继承了Vector),它实现了一个标准的后进先出(LIFO:Last in Frist Out)的栈
特点
后进先出,通过5个操作方法对Vector做了扩展,允许将向量视为堆栈
操作方法
Modifier and Type | Method and Description |
---|---|
booean | empty(),测试这个栈如果是空的 |
E | peek(),看着这个堆栈的顶部的对象有没有从堆栈中删除它,看栈顶元素但不删除 |
E | pop(),删除这个堆栈的顶部的对象,并返回该对象的值函数 |
E | push(E item)把一个项目到堆栈的顶部 |
int | search(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!~