ใน 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 ArrayListArrayList มีสิ่งที่ 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)
    ฉันเห็นคำถามนี้บ่อยมากในเว็บและในความคิดของฉันหลายคนที่มีชื่อเสียงระดับสูงไม่ได้ตอบคำถามเหล่านี้อย่างถูกต้อง ดังนั้นฉันขอแสดงคำตอบของตัวเองที่นี่
ครั้งแรกที่เราควรพิจารณามีความแตกต่างระหว่างและarrayarraylist
คำถามที่ถามว่าสำหรับการเพิ่มองค์ประกอบไปยังอาร์เรย์และไม่ 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()));
        }
    }
}