ใน PHP คุณสามารถเพิ่มองค์ประกอบในอาร์เรย์แบบไดนามิกได้ดังต่อไปนี้:
$x = new Array();
$x[] = 1;
$x[] = 2;
หลังจากนี้จะเป็นอาร์เรย์เช่นนี้$x
{1,2}
มีวิธีทำคล้าย ๆ กันใน Java หรือไม่?
ใน PHP คุณสามารถเพิ่มองค์ประกอบในอาร์เรย์แบบไดนามิกได้ดังต่อไปนี้:
$x = new Array();
$x[] = 1;
$x[] = 2;
หลังจากนี้จะเป็นอาร์เรย์เช่นนี้$x
{1,2}
มีวิธีทำคล้าย ๆ กันใน Java หรือไม่?
คำตอบ:
ดูที่ java.util.LinkedList หรือ java.util.ArrayList
List<Integer> x = new ArrayList<Integer>();
x.add(1);
x.add(2);
int[]
) เพียงแค่ใช้toArray()
วิธีการใน List ใช้โค้ดด้านบน แต่ใช้x.toArray()
เพื่อรับ Array ดั้งเดิม
ARRAY
อ็อบเจ็กต์Oracle หรือความโง่เขลาเช่นนั้นคุณจะหลีกเลี่ยงอาร์เรย์ดั้งเดิมได้ดีกว่า
List
อ้างอิงช่วยให้เราเตะArrayList
ไปที่ขอบถนนได้ตลอดเวลาที่ต้องการ ถ้ามีคนออกรายการที่ดีกว่าเช่นเราอาจจะมีจำนวนมากของงานที่ต้องทำถ้าเราทำของเราอ้างอิงSuperDuperAwesomeList
ArrayList
ArrayList มีสิ่งที่ List ไม่มี หากเราพึ่งพาสิ่งเหล่านั้นในโค้ดของเรามันจะยากกว่ามากที่จะเปลี่ยนออก
อาร์เรย์ใน Java มีขนาดคงที่ดังนั้นคุณจึงไม่สามารถ "เพิ่มบางอย่างต่อท้าย" ได้อย่างที่ทำได้ใน PHP
ลักษณะการทำงานของ PHP คล้ายกันเล็กน้อยคือ:
int[] addElement(int[] org, int added) {
int[] result = Arrays.copyOf(org, org.length +1);
result[org.length] = added;
return result;
}
จากนั้นคุณสามารถเขียน:
x = new int[0];
x = addElement(x, 1);
x = addElement(x, 2);
System.out.println(Arrays.toString(x));
แต่โครงร่างนี้ไม่มีประสิทธิภาพอย่างมากสำหรับอาร์เรย์ที่มีขนาดใหญ่เนื่องจากจะสร้างสำเนาของอาร์เรย์ทั้งหมดในแต่ละครั้ง (และในความเป็นจริงมันไม่เทียบเท่ากับ PHP อย่างสมบูรณ์เนื่องจากอาร์เรย์เก่าของคุณยังคงเหมือนเดิม)
ในความเป็นจริงอาร์เรย์ PHP นั้นค่อนข้างเหมือนกับ Java HashMap ที่มี "คีย์สูงสุด" ที่เพิ่มเข้ามาดังนั้นจึงจะรู้ว่าจะใช้คีย์ใดต่อไปและลำดับการทำซ้ำที่แปลกประหลาด (และความสัมพันธ์ระหว่างคีย์จำนวนเต็มกับสตริงบางตัว) แต่สำหรับคอลเลกชันที่จัดทำดัชนีอย่างง่ายให้ใช้ List ใน Java ดีกว่าเช่นเดียวกับคำตอบอื่น ๆ ที่เสนอ
หากคุณต้องการหลีกเลี่ยงการใช้List
เนื่องจากค่าใช้จ่ายในการตัดทุก int ในจำนวนเต็มให้พิจารณาใช้การใช้คอลเลกชันซ้ำสำหรับประเภทดั้งเดิมซึ่งใช้อาร์เรย์ภายใน แต่จะไม่ทำสำเนาในทุกการเปลี่ยนแปลงเฉพาะเมื่ออาร์เรย์ภายในเต็ม ( เช่นเดียวกับ ArrayList) (ตัวอย่างหนึ่งของ googled อย่างรวดเร็วคือคลาส IntListนี้)
ฝรั่งมีวิธีการสร้างห่อดังกล่าวในInts.asList
, Longs.asList
ฯลฯ
ArrayList
ทำ - ยกเว้นว่าแทนที่จะปรับขนาดทุกส่วนเพิ่มเมื่อหมดห้องมันจะมีขนาดเพิ่มขึ้นเป็นสองเท่าดังนั้นจึงไม่ต้องปรับขนาดใกล้กันบ่อยนัก
org
สั้นกว่าresult
.
Apache Commons มีการใช้งานArrayUtilsเพื่อเพิ่มองค์ประกอบที่ส่วนท้ายของอาร์เรย์ใหม่:
/** Copies the given array and adds the given element at the end of the new array. */
public static <T> T[] add(T[] array, T element)
ฉันเห็นคำถามนี้บ่อยมากในเว็บและในความคิดของฉันหลายคนที่มีชื่อเสียงระดับสูงไม่ได้ตอบคำถามเหล่านี้อย่างถูกต้อง ดังนั้นฉันขอแสดงคำตอบของตัวเองที่นี่
ครั้งแรกที่เราควรพิจารณามีความแตกต่างระหว่างและarray
arraylist
คำถามที่ถามว่าสำหรับการเพิ่มองค์ประกอบไปยังอาร์เรย์และไม่ ArrayList
คำตอบนั้นค่อนข้างง่าย สามารถทำได้ 3 ขั้นตอน
และสุดท้ายนี่คือรหัส:
ขั้นตอนที่ 1:
public List<String> convertArrayToList(String[] array){
List<String> stringList = new ArrayList<String>(Arrays.asList(array));
return stringList;
}
ขั้นตอนที่ 2:
public List<String> addToList(String element,List<String> list){
list.add(element);
return list;
}
ขั้นตอนที่ 3:
public String[] convertListToArray(List<String> list){
String[] ins = (String[])list.toArray(new String[list.size()]);
return ins;
}
ขั้นตอนที่ 4
public String[] addNewItemToArray(String element,String [] array){
List<String> list = convertArrayToList(array);
list= addToList(element,list);
return convertListToArray(list);
}
คุณสามารถใช้ArrayList
และใช้toArray()
วิธีการ แต่ขึ้นอยู่กับว่าคุณกำลังทำอะไรอยู่คุณอาจไม่จำเป็นต้องใช้อาร์เรย์เลยด้วยซ้ำ ดูว่าLists
มีอะไรมากกว่าที่คุณต้องการหรือไม่
คุณอาจต้องการใช้ ArrayList สำหรับสิ่งนี้ - สำหรับอาร์เรย์ขนาดไดนามิกเช่นโครงสร้าง
คุณสามารถเพิ่มองค์ประกอบในอาร์เรย์แบบไดนามิกโดยใช้ Collection Frameworks ใน JAVA กรอบการรวบรวมไม่ทำงานกับชนิดข้อมูลดั้งเดิม
กรอบงานคอลเล็กชันนี้จะมีอยู่ในแพ็คเกจ "java.util. *"
ตัวอย่างเช่นหากคุณใช้ ArrayList
สร้างวัตถุขึ้นมาจากนั้นเพิ่มจำนวนองค์ประกอบ (ประเภทใดก็ได้เช่น String, Integer ... ฯลฯ )
ArrayList a = new ArrayList();
a.add("suman");
a.add(new Integer(3));
a.add("gurram");
ตอนนี้คุณถูกเพิ่ม 3 องค์ประกอบในอาร์เรย์
หากคุณต้องการลบองค์ประกอบใด ๆ ที่เพิ่มเข้ามา
a.remove("suman");
อีกครั้งหากคุณต้องการเพิ่มองค์ประกอบใด ๆ
a.add("Gurram");
ดังนั้นขนาดอาร์เรย์จึงเพิ่มขึ้น / ลดลงแบบไดนามิก ..
ใช้ ArrayList หรือเล่นปาหี่กับอาร์เรย์เพื่อเพิ่มขนาดอาร์เรย์โดยอัตโนมัติ
นับว่าคุณอยู่ที่ไหนในอาร์เรย์ดั้งเดิม
class recordStuff extends Thread
{
double[] aListOfDoubles;
int i = 0;
void run()
{
double newData;
newData = getNewData(); // gets data from somewhere
aListofDoubles[i] = newData; // adds it to the primitive array of doubles
i++ // increments the counter for the next pass
System.out.println("mode: " + doStuff());
}
void doStuff()
{
// Calculate the mode of the double[] array
for (int i = 0; i < aListOfDoubles.length; i++)
{
int count = 0;
for (int j = 0; j < aListOfDoubles.length; j++)
{
if (a[j] == a[i]) count++;
}
if (count > maxCount)
{
maxCount = count;
maxValue = aListOfDoubles[i];
}
}
return maxValue;
}
}
นี่เป็นวิธีง่ายๆในการเพิ่มอาร์เรย์ใน java ฉันใช้อาร์เรย์ที่สองเพื่อจัดเก็บอาร์เรย์เดิมของฉันแล้วเพิ่มอีกหนึ่งองค์ประกอบเข้าไป หลังจากนั้นฉันก็ส่งอาร์เรย์นั้นกลับไปที่อาร์เรย์เดิม
int [] test = {12,22,33};
int [] test2= new int[test.length+1];
int m=5;int mz=0;
for ( int test3: test)
{
test2[mz]=test3; mz++;
}
test2[mz++]=m;
test=test2;
for ( int test3: test)
{
System.out.println(test3);
}
ในขนาดของอาร์เรย์ Java ได้รับการแก้ไข แต่คุณสามารถเพิ่มองค์ประกอบแบบไดนามิกให้กับอาร์เรย์ขนาดคงที่โดยใช้ดัชนีและสำหรับลูป โปรดดูตัวอย่างด้านล่าง
package simplejava;
import java.util.Arrays;
/**
*
* @author sashant
*/
public class SimpleJava {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
try{
String[] transactions;
transactions = new String[10];
for(int i = 0; i < transactions.length; i++){
transactions[i] = "transaction - "+Integer.toString(i);
}
System.out.println(Arrays.toString(transactions));
}catch(Exception exc){
System.out.println(exc.getMessage());
System.out.println(Arrays.toString(exc.getStackTrace()));
}
}
}