Stack ဆိုတဲ့ Data structure ကို language တွေတော်တော်များများမှာ အသုံးများပါတယ်။ Java မှ မဟုတ်ပါဘူး။
Stack တွေဟာ အပေါ်ဆုံးမှာ data ကို တင်လေ့ရှိပြီး အပေါ်ဆုံးကနေပဲ ပြန်ယူတတ်ကြတယ်။ ဥပမာ method a , b , c ကို stack ပေါ်တစ်ခုချင်းစီ တင်သွားရင် ပြန်ထုတ်တဲ့အခါ c , b , a ဆိုပြီး အပေါ်ဆုံးက c က အရင် ပြီးတော့မှ b နောက်ဆုံး a ရယ်လို့ ပြန်ထွက်လာမှာပါ။
import java.util.Stack; public class StackExample { public static void main(String[] args) { Stack<String> callStack = new Stack<>(); callStack.push("a()"); callStack.push("b()"); callStack.push("c()"); System.out.println("Stack Top to Bottom:"); while (!callStack.isEmpty()) { System.out.println("Calling: " + callStack.pop()); } } }
သူ့ရဲ့ console output က
Stack Top to Bottom: Calling: c() Calling: b() Calling: a()
Stack ကို အများဆုံးသုံတဲ့ နေရာကတော့ stack frame ပါ။
ဒါဆို Stack အကြောင်းတော့ သိသွားပြီ။ Stack frame ဆိုတာ ဘာလဲဆိုတာ ကြည့်ရအောင်။Stack Frame ဆိုတာ method တစ်ခုကို ခေါ်လိုက်တိုင်း jvm က frame တစ်ခုကို Stack ထဲတင်လိုက်တာကို ပြောတာပါ။ အလွယ်ဆုံးပြောရရင် error တက်လို့ stack trace တက်လာရင် ပြတဲ့ console output ဟာ stack frame entries တွေပါပဲ။
public class StackTraceDemo { public static void main(String[] args) { methodA(); } static void methodA() { methodB(); } static void methodB() { methodC(); } static void methodC() { int result = 10 / 0; // Will cause ArithmeticException } }
Error output ္ထွက်လာရင် method C က အရင်ဆုံးပြတာကိုတွေ့ရမယ်။
Exception in thread "main" java.lang.ArithmeticException: / by zero at StackTraceDemo.methodC(StackTraceDemo.java:15) at StackTraceDemo.methodB(StackTraceDemo.java:11) at StackTraceDemo.methodA(StackTraceDemo.java:7) at StackTraceDemo.main(StackTraceDemo.java:3)
Recursive function တွေမှာ တခါတလေ မှားရေးမိရင် stack frame တွေ တစ်ခုပေါ်တခုထပ်ပြီး infinite ဖြစ်သွားပါတယ်။ နောက်ဆုံးမှာ stack overflow ဖြစ်သွားတယ်ဆိုတဲ့ အကြောင်းရင်းကလည်း ဒါ့ကြောင့်ပါပဲ။
public class StackOverflowDemo { static void recursiveCall() { recursiveCall(); // infinite recursion } public static void main(String[] args) { recursiveCall(); } }
Error output ္ထွက်လာရင်
Exception in thread "main" java.lang.StackOverflowError at StackOverflowDemo.recursiveCall(StackOverflowDemo.java:4) ...
ဒီလောက်ဆို Stack Data Structure နဲ့ jvm ရဲ့ stack frame အကြောင်း သဘောပေါက်လိမ့်မယ်ထင်ပါတယ်။
Top comments (0)