Stack的java代码 java stacktrace( 二 )


else if((list[i].equals(new String("]")))(! stack.isEmpty()) (! stack.peek().equals(new String("["))) ){
System.out.println("左右括号匹配不正确!");
return;
}
else if((list[i].equals(new String("}")))(! stack.isEmpty()) (stack.peek().equals(new String("{"))) ){
stack.pop();
}
else if((list[i].equals(new String("}")))(! stack.isEmpty()) (! stack.peek().equals(new String("{"))) ){
System.out.println("左右括号匹配不正确!");
return;
}
else if((list[i].equals(new String(")")))||(list[i].equals(new String("]")))||(list[i].equals(new String("}")))(stack.isEmpty())){
System.out.println("右括号多于左括号!");
}
}
JAVA 编程,算法,编写一个名为StackExtension的类来扩展LinkedStack,详细在图里,求代码、详细解答?StackExtension类我测试过了,没有问题.
完整的StackExtension类如下
import dataStructures.LinkedStack;
public class StackExtension extends LinkedStack{
public int sum(){
int n=0;
int size=super.size();
for(int i=0;isize;i++){
n=n+Integer.parseInt(String.valueOf(super.pop()));
}
return n;
}
public String displayPalindromes(){
String s="";
int size=super.size();
for(int i=0;isize;i++){
s=s+String.valueOf(super.get(i))+" ";
}
for(int i=0;isize;i++){
s=s+String.valueOf(super.pop())+" ";
}
return s;
}
}
运行结果
关于JAVA中的Stack.pop()字符串
+
的运算是连接的意思
即 , 把两个字符串连接在一起 。
以你的代码为例:
String
x
=
"aaa";
String
b
=
"bbb";
x
=
x
+
b;
那么x的值是
aaabbb
深入Java虚拟机中的Stack和Heap 在JVM中 内存分为两个部分 Stack(栈)和Heap(堆) 这里 我们从JVM的内存管理原理的角度来认识Stack和Heap 并通过这些原理认清Java中静态方法和静态属性的问题
一般 JVM的内存分为两部分 Stack和Heap
Stack(栈)是JVM的内存指令区 Stack管理很简单 push一定长度字节的数据或者指令 Stack指针压栈相应的字节位移;pop一定字节长度数据或者指令 Stack指针弹栈 Stack的速度很快 管理很简单 并且每次操作的数据或者指令字节长度是已知的 所以Java 基本数据类型 Java 指令代码 常量都保存在Stack中
Heap(堆)是JVM的内存数据区 Heap 的管理很复杂 每次分配不定长的内存空间 专门用来保存对象的实例 在Heap 中分配一定的内存来保存对象实例 实际上也只是保存对象实例的属性值 属性的类型和对象本身的类型标记等 并不保存对象的方法(方法是指令 保存在Stack中) 在Heap 中分配一定的内存保存对象实例和对象的序列化比较类似 而对象实例在Heap 中分配好以后 需要在Stack中保存一个 字节的Heap 内存地址 用来定位该对象实例在Heap 中的位置 便于找到该对象实例
由于Stack的内存管理是顺序分配的 而且定长 不存在内存回收问题;而Heap 则是随机分配内存 不定长度 存在内存分配和回收的问题;因此在JVM中另有一个GC进程 定期扫描Heap 它根据Stack中保存的 字节对象地址扫描Heap 定位Heap 中这些对象 进行一些优化(例如合并空闲内存块什么的) 并且假设Heap 中没有扫描到的区域都是空闲的 统统refresh(实际上是把Stack中丢失了对象地址的无用对象清除了) 这就是垃圾收集的过程;关于垃圾收集的更深入讲解请参考 CTO之前的文章《JVM内存模型及垃圾收集策略解析》
JVM的体系结构
我们首先要搞清楚的是什么是数据以及什么是指令 然后要搞清楚对象的方法和对象的属性分别保存在哪里
)方法本身是指令的操作码部分 保存在Stack中;

推荐阅读