ในขนาดอาร์เรย์ของ Java มักจะมีความยาวคงที่ แต่มีวิธีที่คุณสามารถเพิ่มขนาดของอาร์เรย์แบบไดนามิกที่รันไทม์ได้
นี่เป็นวิธีที่ "ใช้" มากที่สุดและเป็นวิธีที่ต้องการ -
int temp[]=new int[stck.length+1];
for(int i=0;i<stck.length;i++)temp[i]=stck[i];
stck=temp;
ในโค้ดด้านบนเรากำลังเริ่มต้นอาร์เรย์ temp [] ใหม่และเพิ่มเติมโดยใช้ for loop เพื่อเริ่มต้นเนื้อหาของ temp ด้วยเนื้อหาของอาร์เรย์ดั้งเดิมเช่น stck [] จากนั้นคัดลอกกลับไปที่ต้นฉบับอีกครั้งทำให้เรามี SIZE ใหม่
ไม่ต้องสงสัยเลยว่ามันสร้าง CPU Overhead เนื่องจากการเริ่มต้นอาร์เรย์ใหม่โดยใช้สำหรับลูปซ้ำ ๆ แต่คุณยังสามารถใช้และติดตั้งในโค้ดของคุณได้ สำหรับแนวทางปฏิบัติที่ดีที่สุดให้ใช้ "รายการที่เชื่อมโยง" แทนอาร์เรย์หากคุณต้องการให้จัดเก็บข้อมูลแบบไดนามิกในหน่วยความจำโดยมีความยาวผันแปรได้
นี่คือตัวอย่างแบบเรียลไทม์ที่อิงตาม Dynamic Stacks เพื่อเพิ่มขนาดอาร์เรย์ในเวลารัน
ชื่อไฟล์: DStack.java
public class DStack {
private int stck[];
int tos;
void Init_Stck(int size) {
stck=new int[size];
tos=-1;
}
int Change_Stck(int size){
return stck[size];
}
public void push(int item){
if(tos==stck.length-1){
int temp[]=new int[stck.length+1];
for(int i=0;i<stck.length;i++)temp[i]=stck[i];
stck=temp;
stck[++tos]=item;
}
else
stck[++tos]=item;
}
public int pop(){
if(tos<0){
System.out.println("Stack Underflow");
return 0;
}
else return stck[tos--];
}
public void display(){
for(int x=0;x<stck.length;x++){
System.out.print(stck[x]+" ");
}
System.out.println();
}
}
ชื่อไฟล์: Exec.java
(พร้อมคลาสหลัก)
import java.util.*;
public class Exec {
private static Scanner in;
public static void main(String[] args) {
in = new Scanner(System.in);
int option,item,i=1;
DStack obj=new DStack();
obj.Init_Stck(1);
do{
System.out.println();
System.out.println("--MENU--");
System.out.println("1. Push a Value in The Stack");
System.out.println("2. Pop a Value from the Stack");
System.out.println("3. Display Stack");
System.out.println("4. Exit");
option=in.nextInt();
switch(option){
case 1:
System.out.println("Enter the Value to be Pushed");
item=in.nextInt();
obj.push(item);
break;
case 2:
System.out.println("Popped Item: "+obj.pop());
obj.Change_Stck(obj.tos);
break;
case 3:
System.out.println("Displaying...");
obj.display();
break;
case 4:
System.out.println("Exiting...");
i=0;
break;
default:
System.out.println("Enter a Valid Value");
}
}while(i==1);
}
}
หวังว่านี่จะช่วยแก้ข้อสงสัยของคุณได้