ฉันสงสัยว่าจะเริ่มต้นอาร์เรย์จำนวนเต็มอย่างไรให้ขนาดและค่าเปลี่ยนแปลงไปตลอดการทำงานของโปรแกรมของฉันมีข้อเสนอแนะหรือไม่?
ฉันสงสัยว่าจะเริ่มต้นอาร์เรย์จำนวนเต็มอย่างไรให้ขนาดและค่าเปลี่ยนแปลงไปตลอดการทำงานของโปรแกรมของฉันมีข้อเสนอแนะหรือไม่?
คำตอบ:
ใน Java อาร์เรย์ "ปกติ" เป็นขนาดคงที่ คุณต้องกำหนดขนาดและไม่สามารถขยายหรือหดได้ ในการเปลี่ยนขนาดคุณต้องสร้างอาร์เรย์ใหม่และคัดลอกข้อมูลที่คุณต้องการซึ่งไม่มีประสิทธิภาพและสร้างความเจ็บปวดให้กับคุณ
โชคดีที่มีคลาสในตัวทุกประเภทที่ใช้โครงสร้างข้อมูลทั่วไปและเครื่องมือที่มีประโยชน์อื่น ๆ ด้วย คุณจะต้องตรวจสอบJava 6 APIเพื่อดูรายการทั้งหมด
ข้อแม้หนึ่งข้อ: ArrayList สามารถเก็บวัตถุได้เท่านั้น (เช่นจำนวนเต็ม) ไม่ใช่แบบดั้งเดิม (เช่น ints) ในกรณีส่วนใหญ่autoboxing / autounboxingจะดูแลเรื่องนี้ให้คุณแบบเงียบ ๆ แต่คุณอาจมีพฤติกรรมแปลก ๆ ขึ้นอยู่กับว่าคุณกำลังทำอะไรอยู่
size
ตามที่โปรแกรมดำเนินการต่อไป มันจะได้ขนาดใดก็ตามที่เกิดขึ้นsize
เมื่อบรรทัดนั้นถูกเรียกใช้งาน
null
ในตอนท้าย ความคิดใด ๆ ทำไม?
อาร์เรย์ใน Java มีขนาดคงที่ สิ่งที่คุณต้องการคือ ArrayList ซึ่งเป็นหนึ่งในคอลเลกชันที่มีค่าอย่างยิ่งที่มีอยู่ใน Java
แทน
Integer[] ints = new Integer[x]
คุณใช้
List<Integer> ints = new ArrayList<Integer>();
จากนั้นเพื่อเปลี่ยนรายการที่คุณใช้ints.add(y)
และints.remove(z)
วิธีการอื่น ๆ ที่มีประโยชน์คุณสามารถพบได้ใน Javadocs ที่เหมาะสม
ฉันขอแนะนำอย่างยิ่งให้ศึกษาคลาส Collections ที่มีอยู่ใน Java เนื่องจากมีประสิทธิภาพมากและมีฟังก์ชันในตัวมากมายที่มือใหม่ Java มักจะพยายามเขียนตัวเองใหม่โดยไม่จำเป็น
List<Integer>
แทนArrayList<Integer>
?
อาร์เรย์เป็นขนาดคงที่เมื่อสร้างอินสแตนซ์ คุณสามารถใช้รายการแทน
Autoboxing ทำให้ List ใช้งานได้คล้ายกับอาร์เรย์คุณสามารถใส่ค่า int ลงไปได้:
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
ผมไม่เห็นด้วยกับคำตอบก่อนหน้านี้บอกArrayList
เพราะArrayList
เป็นไม่ได้อาร์เรย์แบบไดนามิก แต่รายการที่ได้รับการสนับสนุนโดยอาร์เรย์ ความแตกต่างคือคุณไม่สามารถทำสิ่งต่อไปนี้ได้:
ArrayList list = new ArrayList(4);
list.put(3,"Test");
มันจะทำให้คุณมี IndexOutOfBoundsException เนื่องจากยังไม่มีองค์ประกอบในตำแหน่งนี้แม้ว่าอาร์เรย์สำรองจะอนุญาตให้มีการเพิ่มดังกล่าว ดังนั้นคุณต้องใช้การใช้งาน Array ที่ขยายได้แบบกำหนดเองตามที่แนะนำโดย @ Randy-lance
Simple code for dynamic array. In below code then array will become full of size we copy all element to new double size array(variable size array).sample code is below
public class DynamicArray {
static int []increaseSizeOfArray(int []arr){
int []brr=new int[(arr.length*2)];
for (int i = 0; i < arr.length; i++) {
brr[i]=arr[i];
}
return brr;
}
public static void main(String[] args) {
int []arr=new int[5];
for (int i = 0; i < 11; i++) {
if (i<arr.length) {
arr[i]=i+100;
}
else {
arr=increaseSizeOfArray(arr);
arr[i]=i+100;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println("arr="+arr[i]);
}
}
}
ที่มา: วิธีสร้างไดนามิกอาร์เรย์
ขอแนะนำให้ใช้รายการเพื่อจัดการกับขนาดที่เล็ก
หากคุณมีตัวเลขจำนวนมากอย่าใช้รายการและกล่องอัตโนมัติ
แสดงรายการ <จำนวนเต็ม>
สำหรับทุก int เดียวจำนวนเต็มใหม่จะถูกสร้างขึ้นโดยอัตโนมัติ คุณจะพบว่ามันเริ่มช้าลงเมื่อขนาดของรายการเพิ่มขึ้น จำนวนเต็มเหล่านี้เป็นวัตถุที่ไม่จำเป็น ในกรณีนี้ให้ใช้ขนาดโดยประมาณจะดีกว่า
int[] array = new int[ESTIMATED_SIZE];
วิธีการใช้List
แทน? ตัวอย่างเช่น,ArrayList<integer>
คุณไม่สามารถเปลี่ยนขนาดของอาร์เรย์ อย่างไรก็ตามคุณสามารถสร้างอาร์เรย์ใหม่ที่มีขนาดที่เหมาะสมและคัดลอกข้อมูลจากอาร์เรย์เก่าไปยังอาร์เรย์ใหม่ได้
แต่ตัวเลือกที่ดีที่สุดของคุณคือใช้ IntList จาก jacarta commons ( ที่นี่ )
มันทำงานเหมือนกับ List แต่ใช้พื้นที่น้อยกว่าและมีประสิทธิภาพมากกว่าเพราะเก็บ int แทนการจัดเก็บออบเจ็กต์ Wrapper ไว้เหนือ int (นั่นคือคลาส Integer)
ฉันตอบคำถามนี้และไม่คุณไม่ต้องการอาร์เรย์หรือสิ่งอื่นใดนี่เป็นการมอบหมายงานและฉันทำเสร็จแล้วดังนั้นใช่อาร์เรย์สามารถเพิ่มขนาดได้ นี่คือลิงค์ วิธีใช้ Java Dynamic Array และนี่คือลิงค์สำหรับคำถามของฉันซึ่งฉันตอบ Java Dynamic arrays
int[] array = new int[size];
size
เป็นตัวแปร แต่ต้องแก้ไขความยาวของอาร์เรย์ใช่ไหม @Lord Torgamus