ฉันจะประกาศและเริ่มต้นอาร์เรย์ใน Java ได้อย่างไร


2053

ฉันจะประกาศและเริ่มต้นอาร์เรย์ใน Java ได้อย่างไร


4
ก่อนที่คุณจะโพสต์คำตอบใหม่พิจารณาว่ามีคำตอบสำหรับคำถามนี้แล้ว 25+ ข้อ กรุณาตรวจสอบให้แน่ใจว่าคำตอบของคุณก่อให้เกิดข้อมูลที่ไม่ใช่คำตอบที่มีอยู่
janniks

คำตอบ:


2682

คุณสามารถใช้การประกาศอาร์เรย์หรือเรียงตามตัวอักษรของอาร์เรย์ (แต่เมื่อคุณประกาศและส่งผลต่อตัวแปรทันทีไม่สามารถใช้ตัวอักษรแถวลำดับสำหรับการกำหนดอาร์เรย์ใหม่ได้)

สำหรับประเภทดั้งเดิม:

int[] myIntArray = new int[3];
int[] myIntArray = {1, 2, 3};
int[] myIntArray = new int[]{1, 2, 3};

// Since Java 8. Doc of IntStream: https://docs.oracle.com/javase/8/docs/api/java/util/stream/IntStream.html

int [] myIntArray = IntStream.range(0, 100).toArray(); // From 0 to 99
int [] myIntArray = IntStream.rangeClosed(0, 100).toArray(); // From 0 to 100
int [] myIntArray = IntStream.of(12,25,36,85,28,96,47).toArray(); // The order is preserved.
int [] myIntArray = IntStream.of(12,25,36,85,28,96,47).sorted().toArray(); // Sort 

สำหรับคลาสเช่นStringเดียวกัน:

String[] myStringArray = new String[3];
String[] myStringArray = {"a", "b", "c"};
String[] myStringArray = new String[]{"a", "b", "c"};

วิธีที่สามของการเริ่มต้นมีประโยชน์เมื่อคุณประกาศอาร์เรย์ก่อนแล้วจึงเริ่มต้นได้ นักแสดงมีความจำเป็นที่นี่

String[] myStringArray;
myStringArray = new String[]{"a", "b", "c"};

33
จุดประสงค์ของการมีวิธีที่สองและสามในการทำคืออะไร?
Quazi Irfan

123
@iamcreasy ดูเหมือนว่าวิธีที่สองจะไม่ทำงานกับคำสั่ง return return {1,2,3}ให้ข้อผิดพลาดในขณะที่return new int[]{1,2,3}ทำงานได้ดี (สมมติว่าฟังก์ชันของคุณส่งคืนอาร์เรย์จำนวนเต็ม)
Skylar Ittner

1
@SkylarMT แต่เรายังคงสามารถใช้วิธีแรกกับการส่งคืนคำสั่ง
Quazi Irfan

6
@iamcreasy ฉันเพิ่งเขียนฟังก์ชันที่คืนค่าอาร์เรย์ของ ints หากมีข้อผิดพลาดเกิดขึ้นภายในฟังก์ชั่นฉันต้องการให้มันคืนค่าที่แน่นอน วิธีใดที่เหมาะกับข้อความสั่งคืนแบบหนึ่งบรรทัด? เฉพาะอันที่สาม
Skylar Ittner

5
@apadana ในกรณีที่สองคุณกำลังสร้างวัตถุที่ไม่ระบุชื่อซึ่งกำหนดไว้เฉพาะในขอบเขตการปิดล้อม (ฟังก์ชันหรืออะไรก็ตาม) หลังจากส่งคืนไปยังผู้โทรแล้วจะไม่สามารถใช้งานได้อีกต่อไป การใช้คีย์เวิร์ดใหม่คุณจัดสรรออบเจ็กต์ใหม่จากฮีปและมันจะใช้ได้นอกขอบเขตที่กำหนด
teukkam

280

อาร์เรย์มีสองประเภท

อาร์เรย์หนึ่งมิติ

ไวยากรณ์สำหรับค่าเริ่มต้น:

int[] num = new int[5];

หรือ (น้อยกว่าที่ต้องการ)

int num[] = new int[5];

ไวยากรณ์ที่มีค่าที่กำหนด (การกำหนดค่าเริ่มต้นของตัวแปร / ฟิลด์):

int[] num = {1,2,3,4,5};

หรือ (น้อยกว่าที่ต้องการ)

int num[] = {1, 2, 3, 4, 5};

หมายเหตุ: เพื่อความสะดวกสบาย int [] มีจำนวนที่ดีกว่าเพราะมันบอกได้อย่างชัดเจนว่าคุณกำลังพูดถึงอาร์เรย์ ไม่แตกต่างกัน ไม่ใช่เลย.

อาร์เรย์หลายมิติ

การประกาศ

int[][] num = new int[5][2];

หรือ

int num[][] = new int[5][2];

หรือ

int[] num[] = new int[5][2];

การเริ่มต้น

 num[0][0]=1;
 num[0][1]=2;
 num[1][0]=1;
 num[1][1]=2;
 num[2][0]=1;
 num[2][1]=2;
 num[3][0]=1;
 num[3][1]=2;
 num[4][0]=1;
 num[4][1]=2;

หรือ

 int[][] num={ {1,2}, {1,2}, {1,2}, {1,2}, {1,2} };

Ragged Array (หรือ Array ที่ไม่เป็นรูปสี่เหลี่ยมผืนผ้า)

 int[][] num = new int[5][];
 num[0] = new int[1];
 num[1] = new int[5];
 num[2] = new int[2];
 num[3] = new int[3];

ดังนั้นที่นี่เราจะกำหนดคอลัมน์อย่างชัดเจน
อีกวิธีหนึ่ง:

int[][] num={ {1}, {1,2}, {1,2,3,4,5}, {1,2}, {1,2,3} };

สำหรับการเข้าถึง:

for (int i=0; i<(num.length); i++ ) {
    for (int j=0;j<num[i].length;j++)
        System.out.println(num[i][j]);
}

อีกวิธีหนึ่งคือ:

for (int[] a : num) {
  for (int i : a) {
    System.out.println(i);
  }
}

Ragged Array เป็น Array หลายมิติ
สำหรับคำอธิบายดูรายละเอียดอาร์เรย์หลายมิติได้ที่บทแนะนำจาวาอย่างเป็นทางการ


คนแรกจะไม่นำไปสู่อาร์เรย์ว่าง / ว่างเปล่าแทนที่จะเป็นอาร์เรย์ที่มีค่าเริ่มต้นหรือไม่
vipin8169

ฉันเห็นด้วยกับจุดนั้นและเราสามารถเพิ่มคุณสมบัติอีกหนึ่งเราสามารถเปลี่ยนขนาดแบบไดนามิก
AdamIJK

ฉันอาจโต้เถียงกับคุณในจุดที่อาร์เรย์หลายมิติเป็น "ประเภท" ของอาร์เรย์ที่แตกต่างกัน มันเป็นเพียงคำที่ใช้อธิบายอาร์เรย์ที่เกิดขึ้นเพื่อมีอาร์เรย์อื่น ๆ ทั้งอาร์เรย์ภายนอกและอาร์เรย์ภายใน (และอยู่ระหว่างนั้นหากมี) เป็นเพียงอาร์เรย์ปกติ
ทิม M.

127
Type[] variableName = new Type[capacity];

Type[] variableName = {comma-delimited values};



Type variableName[] = new Type[capacity]; 

Type variableName[] = {comma-delimited values};

ก็ใช้ได้เช่นกัน แต่ฉันชอบวงเล็บหลังประเภทเพราะมันง่ายกว่าที่จะเห็นว่าประเภทของตัวแปรนั้นเป็นอาร์เรย์จริงๆ


22
ฉันเห็นด้วยกับจุดนั้น ประเภทของตัวแปรไม่ใช่ "TYPE" แต่จริงๆแล้วเป็น TYPE [] ดังนั้นจึงเหมาะสมที่จะเขียนให้ฉัน
เจตน์

3
สไตล์ Google ก็แนะนำสิ่งนี้เช่นกัน
wener

11
โปรดทราบว่าint[] a, b;จะไม่เหมือนกันเป็นint a[], b;ความผิดพลาดง่าย ๆ หากคุณใช้แบบฟอร์มหลัง
Jeroen Vannevel

39

มีหลายวิธีที่คุณสามารถประกาศอาร์เรย์ใน Java:

float floatArray[]; // Initialize later
int[] integerArray = new int[10];
String[] array = new String[] {"a", "b"};

คุณสามารถหาข้อมูลเพิ่มเติมได้ในการกวดวิชาซันเว็บไซต์และJavaDoc


31

ฉันคิดว่ามันมีประโยชน์ถ้าคุณเข้าใจแต่ละส่วน:

Type[] name = new Type[5];

Type[]เป็นชนิดของตัวแปรที่เรียกว่าชื่อ ("ชื่อ" เรียกว่าตัวระบุ ) ตัวอักษร "ประเภท" เป็นประเภทฐานและวงเล็บหมายถึงนี่คือประเภทอาร์เรย์ของฐานนั้น ประเภทอาเรย์เป็นประเภทของตัวเองซึ่งช่วยให้คุณสามารถสร้างอาร์เรย์หลายมิติเช่นType[][](ประเภทอาร์เรย์ของประเภท []) คำหลักnewบอกว่าจะจัดสรรหน่วยความจำสำหรับอาร์เรย์ใหม่ จำนวนระหว่างวงเล็บบอกว่าอาร์เรย์ใหม่จะมีขนาดใหญ่เท่าใดและจะจัดสรรหน่วยความจำได้เท่าใด ตัวอย่างเช่นหาก Java รู้ว่าประเภทฐานTypeใช้เวลา 32 ไบต์และคุณต้องการอาร์เรย์ที่มีขนาด 5 ก็จำเป็นต้องจัดสรรภายใน 32 * 5 = 160 ไบต์

คุณยังสามารถสร้างอาร์เรย์ด้วยค่าที่มีอยู่แล้วเช่น

int[] name = {1, 2, 3, 4, 5};

ซึ่งไม่เพียงสร้างพื้นที่ว่างเปล่า แต่เติมด้วยค่าเหล่านั้น Java สามารถบอกได้ว่า primitives นั้นเป็นจำนวนเต็มและมีอยู่ 5 ตัวดังนั้นขนาดของอาร์เรย์สามารถถูกกำหนดได้โดยปริยาย


ดังนั้นจึงไม่จำเป็นต้องรวมint[] name = new int[5]?
Cookie Monster

31

ต่อไปนี้แสดงให้เห็นถึงการประกาศของอาร์เรย์ แต่อาร์เรย์ไม่ได้เริ่มต้น:

 int[] myIntArray = new int[3];

ต่อไปนี้แสดงให้เห็นถึงการประกาศเช่นเดียวกับการเริ่มต้นของอาร์เรย์:

int[] myIntArray = {1,2,3};

ตอนนี้ต่อไปนี้ยังแสดงให้เห็นถึงการประกาศเช่นเดียวกับการเริ่มต้นของอาร์เรย์:

int[] myIntArray = new int[]{1,2,3};

แต่อันที่สามนี้แสดงคุณสมบัติของการสร้างอาเรย์ - วัตถุนิรนามซึ่งชี้โดยตัวแปรอ้างอิง "myIntArray" ดังนั้นถ้าเราเขียนแค่ "new int [] {1,2,3};" ดังนั้นนี่คือวิธีสร้างอาร์เรย์วัตถุที่ไม่ระบุชื่อ

ถ้าเราเพิ่งเขียน:

int[] myIntArray;

นี่ไม่ใช่การประกาศของอาเรย์ แต่คำสั่งต่อไปนี้ทำให้การประกาศข้างต้นเสร็จสมบูรณ์:

myIntArray=new int[3];

2
ไม่มีความแตกต่างอย่างแน่นอนระหว่างแนวทางที่สองและสามนอกเหนือจากวิธีที่สองนั้นจะทำงานได้ก็ต่อเมื่อคุณประกาศตัวแปรด้วย ยังไม่ชัดเจนว่าคุณหมายถึงอะไรโดย "แสดงคุณสมบัติของการสร้างวัตถุอาร์เรย์ที่ไม่ระบุชื่อ" แต่จริงๆแล้วมันเป็นโค้ดที่เทียบเท่ากัน
Jon Skeet

4
นอกจากนี้ตัวอย่างแรกจะเริ่มต้นอาร์เรย์ - มันรับประกันว่าจะมีค่า 0 สำหรับทุกองค์ประกอบอาร์เรย์
Jon Skeet

ไม่มีความแตกต่างระหว่างแนวทางที่สองกับแนวทางที่สามหรือไม่?
typelogic

27

อีกวิธีหนึ่งคือ

// Either method works
String arrayName[] = new String[10];
String[] arrayName = new String[10];

ที่ประกาศอาร์เรย์ที่เรียกว่าarrayNameขนาด 10 (คุณมีองค์ประกอบ 0 ถึง 9 ที่จะใช้)


7
มาตรฐานที่ใช้คืออะไร? ฉันเพิ่งค้นพบอดีตและฉันพบว่ามันทำให้เข้าใจผิดอย่างน่ากลัว: |
Anti Earth

2
สำหรับสิ่งที่คุ้มค่าศาสตราจารย์ของฉันกล่าวว่าวิธีที่สองเป็นเรื่องปกติมากขึ้นใน Java และมันบ่งบอกสิ่งที่เกิดขึ้นดีขึ้น เป็นอาร์เรย์ที่เกี่ยวข้องกับประเภทของตัวแปรที่ถูกโยนเป็น
Celeritas

2
สำหรับหมายเหตุด้าน: ภาษาที่มีความหมายมากกว่าหนึ่งเพื่อประกาศสิ่งหนึ่งหมายถึงการออกแบบภาษาที่ไม่ดี
Muhammad Suleman

26

นอกจากนี้ในกรณีที่คุณต้องการบางสิ่งบางอย่างที่มีไดนามิกมากขึ้นก็จะมีส่วนติดต่อแบบรายการ สิ่งนี้จะไม่ทำงานเช่นกัน แต่มีความยืดหยุ่นมากกว่า:

List<String> listOfString = new ArrayList<String>();

listOfString.add("foo");
listOfString.add("bar");

String value = listOfString.get(0);
assertEquals( value, "foo" );

2
"<>" เรียกว่าอะไรในรายการที่คุณสร้าง
CyprUS

@CyprUS Listเป็นคลาสทั่วไปมีประเภทเป็นพารามิเตอร์ที่ล้อมรอบ<>ด้วย สิ่งนี้ช่วยได้เพราะคุณต้องกำหนดประเภททั่วไปเพียงครั้งเดียวและจากนั้นคุณสามารถใช้กับประเภทที่แตกต่างกันหลายประเภท สำหรับคำอธิบายโดยละเอียดเพิ่มเติมดูที่docs.oracle.com/javase/tutorial/java/generics/types.html
Heimdall

15

มีสองวิธีหลักในการสร้างอาร์เรย์:

อันนี้สำหรับอาเรย์ที่ว่างเปล่า:

int[] array = new int[n]; // "n" being the number of spaces to allocate in the array

และอันนี้สำหรับอาเรย์เริ่มต้น:

int[] array = {1,2,3,4 ...};

คุณสามารถสร้างอาร์เรย์หลายมิติได้เช่นนี้

int[][] array2d = new int[x][y]; // "x" and "y" specify the dimensions
int[][] array2d = { {1,2,3 ...}, {4,5,6 ...} ...};

11

ใช้ประเภทดั้งเดิมintเช่น มีหลายวิธีในการประกาศและintจัดเรียง:

int[] i = new int[capacity];
int[] i = new int[] {value1, value2, value3, etc};
int[] i = {value1, value2, value3, etc};

ที่ในทุกเหล่านี้คุณสามารถใช้แทนint i[]int[] i

ด้วยการสะท้อนคุณสามารถใช้ (Type[]) Array.newInstance(Type.class, capacity);

โปรดสังเกตว่าในพารามิเตอร์วิธีการบ่งชี้... variable argumentsโดยพื้นฐานแล้วพารามิเตอร์จำนวนเท่าใดก็ได้ ง่ายต่อการอธิบายด้วยรหัส:

public static void varargs(int fixed1, String fixed2, int... varargs) {...}
...
varargs(0, "", 100); // fixed1 = 0, fixed2 = "", varargs = {100}
varargs(0, "", 100, 200); // fixed1 = 0, fixed2 = "", varargs = {100, 200};

ภายในวิธีการที่จะถือว่าเป็นปกติvarargs สามารถใช้ได้เฉพาะในพารามิเตอร์เมธอดเท่านั้นดังนั้นจะไม่รวบรวมint[]Type...int... i = new int[] {}

โปรดทราบว่าเมื่อส่งผ่านint[]ไปยังเมธอด (หรือวิธีอื่นType[]) คุณจะไม่สามารถใช้วิธีที่สามได้ ในคำสั่งint[] i = *{a, b, c, d, etc}*คอมไพเลอร์สันนิษฐานว่าหมายถึง{...} int[]แต่นั่นเป็นเพราะคุณกำลังประกาศตัวแปร เมื่อผ่านอาร์เรย์ไปยังเมธอดการประกาศจะต้องเป็นnew Type[capacity]หรือnew Type[] {...}หรือ

อาร์เรย์หลายมิติ

อาร์เรย์หลายมิตินั้นยากที่จะจัดการได้ โดยพื้นฐานแล้วอาร์เรย์ 2 มิติเป็นอาร์เรย์ของอาร์เรย์ int[][]หมายถึงอาร์เรย์ของint[]s ที่สำคัญคือว่าถ้าint[][]จะประกาศเป็นดัชนีสูงสุดคือint[x][y] i[x-1][y-1]เป็นหลักสี่เหลี่ยมint[3][5]คือ:

[0, 0] [1, 0] [2, 0]
[0, 1] [1, 1] [2, 1]
[0, 2] [1, 2] [2, 2]
[0, 3] [1, 3] [2, 3]
[0, 4] [1, 4] [2, 4]

10

ใน Java 9

การใช้ที่แตกต่างกันIntStream.iterateและIntStream.takeWhileวิธีการ:

int[] a = IntStream.iterate(10, x -> x <= 100, x -> x + 10).toArray();

Out: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]


int[] b = IntStream.iterate(0, x -> x + 1).takeWhile(x -> x < 10).toArray();

Out: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

ใน Java 10

ใช้การอนุมานประเภท Local Variable :

var letters = new String[]{"A", "B", "C"};

9

หากคุณต้องการสร้างอาร์เรย์โดยใช้การสะท้อนคุณสามารถทำได้ดังนี้

 int size = 3;
 int[] intArray = (int[]) Array.newInstance(int.class, size ); 

ทำไมคุณต้องการสร้างอาร์เรย์ด้วยวิธีนี้
Dorian Gray

9

ประกาศอาร์เรย์ของการอ้างอิงวัตถุ:

class Animal {}

class Horse extends Animal {
    public static void main(String[] args) {

        /*
         * Array of Animal can hold Animal and Horse (all subtypes of Animal allowed)
         */
        Animal[] a1 = new Animal[10];
        a1[0] = new Animal();
        a1[1] = new Horse();

        /*
         * Array of Animal can hold Animal and Horse and all subtype of Horse
         */
        Animal[] a2 = new Horse[10];
        a2[0] = new Animal();
        a2[1] = new Horse();

        /*
         * Array of Horse can hold only Horse and its subtype (if any) and not
           allowed supertype of Horse nor other subtype of Animal.
         */
        Horse[] h1 = new Horse[10];
        h1[0] = new Animal(); // Not allowed
        h1[1] = new Horse();

        /*
         * This can not be declared.
         */
        Horse[] h2 = new Animal[10]; // Not allowed
    }
}

7

Array เป็นรายการลำดับของรายการ

int item = value;

int [] one_dimensional_array = { value, value, value, .., value };

int [][] two_dimensional_array =
{
  { value, value, value, .. value },
  { value, value, value, .. value },
    ..     ..     ..        ..
  { value, value, value, .. value }
};

หากเป็นวัตถุก็เป็นแนวคิดเดียวกัน

Object item = new Object();

Object [] one_dimensional_array = { new Object(), new Object(), .. new Object() };

Object [][] two_dimensional_array =
{
  { new Object(), new Object(), .. new Object() },
  { new Object(), new Object(), .. new Object() },
    ..            ..               ..
  { new Object(), new Object(), .. new Object() }
};

ในกรณีของวัตถุคุณต้องกำหนดให้กับมันเพื่อnullเริ่มต้นพวกเขาโดยใช้new Type(..)คลาสเช่นStringและIntegerเป็นกรณีพิเศษที่จะได้รับการจัดการดังต่อไปนี้

String [] a = { "hello", "world" };
// is equivalent to
String [] a = { new String({'h','e','l','l','o'}), new String({'w','o','r','l','d'}) };

Integer [] b = { 1234, 5678 };
// is equivalent to
Integer [] b = { new Integer(1234), new Integer(5678) };

โดยทั่วไปคุณสามารถสร้างอาร์เรย์ที่มีMมิติ

int [][]..[] array =
//  ^ M times [] brackets

    {{..{
//  ^ M times { bracket

//            this is array[0][0]..[0]
//                         ^ M times [0]

    }}..}
//  ^ M times } bracket
;

ควรทราบว่าการสร้างMอาร์เรย์มิตินั้นมีราคาแพงในแง่ของพื้นที่ เนื่องจากเมื่อคุณสร้างMอาร์เรย์มิติด้วยNทุกมิติขนาดทั้งหมดของอาร์เรย์จึงใหญ่กว่าN^Mเนื่องจากแต่ละอาร์เรย์มีการอ้างอิงและที่มิติ M จะมีการอ้างอิงมิติ (M-1) - มิติ ขนาดโดยรวมมีดังต่อไปนี้

Space = N^M + N^(M-1) + N^(M-2) + .. + N^0
//      ^                              ^ array reference
//      ^ actual data

7

ใน Java 8 คุณสามารถใช้สิ่งนี้

String[] strs = IntStream.range(0, 15)  // 15 is the size
    .mapToObj(i -> Integer.toString(i))
    .toArray(String[]::new);

6

java.util.ArrayListสำหรับการสร้างอาร์เรย์ของวัตถุที่ระดับคุณสามารถใช้ เพื่อกำหนดอาร์เรย์:

public ArrayList<ClassName> arrayName;
arrayName = new ArrayList<ClassName>();

กำหนดค่าให้กับอาร์เรย์:

arrayName.add(new ClassName(class parameters go here);

อ่านจากอาร์เรย์:

ClassName variableName = arrayName.get(index);

บันทึก:

variableNameเป็นการอ้างอิงถึงอาร์เรย์ความหมายที่จัดการvariableNameจะจัดการarrayName

สำหรับลูป:

//repeats for every value in the array
for (ClassName variableName : arrayName){
}
//Note that using this for loop prevents you from editing arrayName

สำหรับลูปที่ให้คุณแก้ไขarrayName(ทั่วไปสำหรับลูป):

for (int i = 0; i < arrayName.size(); i++){
    //manipulate array here
}

5

ประกาศและเตรียมใช้งานสำหรับ Java 8 และใหม่กว่า สร้างอาร์เรย์จำนวนเต็มอย่างง่าย:

int [] a1 = IntStream.range(1, 20).toArray();
System.out.println(Arrays.toString(a1));
// Output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

สร้างอาร์เรย์สุ่มสำหรับจำนวนเต็มระหว่าง [-50, 50] และสำหรับคู่ผสม [0, 1E17]:

int [] a2 = new Random().ints(15, -50, 50).toArray();
double [] a3 = new Random().doubles(5, 0, 1e17).toArray();

Power-of-two sequence:

double [] a4 = LongStream.range(0, 7).mapToDouble(i -> Math.pow(2, i)).toArray();
System.out.println(Arrays.toString(a4));
// Output: [1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0]

สำหรับ String [] คุณต้องระบุตัวสร้าง:

String [] a5 = Stream.generate(()->"I will not squeak chalk").limit(5).toArray(String[]::new);
System.out.println(Arrays.toString(a5));

อาร์เรย์หลายมิติ:

String [][] a6 = List.of(new String[]{"a", "b", "c"} , new String[]{"d", "e", "f", "g"})
    .toArray(new String[0][]);
System.out.println(Arrays.deepToString(a6));
// Output: [[a, b, c], [d, e, f, g]]

-50 และ / หรือ +50 รวมอยู่ด้วยหรือไม่? กล่าวคือเปิดภายในที่ปลายด้านหนึ่งหรือทั้งสองด้านหรือไม่
Peter Mortensen

1
รวม -50 และไม่รวม +50 ข้อมูลจากjava api นี้ "ให้กำเนิด (รวม) และผูกพัน (พิเศษ)" ฉันจะใช้ช่วงเวลาการประกาศจาก วิกิพีเดีย ดังนั้นฉันคิดว่ามันจะถูกต้องมากขึ้น [-50, 50)
Kirill Podlivaev

3

อีกวิธีในการประกาศและเริ่มต้น ArrayList:

private List<String> list = new ArrayList<String>(){{
    add("e1");
    add("e2");
}};

2

มีคำตอบมากมายที่นี่ ฉันกำลังเพิ่มวิธีที่ยุ่งยากในการสร้างอาร์เรย์ (จากมุมมองการสอบมันเป็นการดีที่จะรู้สิ่งนี้)

  1. ประกาศและกำหนดอาร์เรย์

    int intArray[] = new int[3];

    สิ่งนี้จะสร้างอาร์เรย์ที่มีความยาว 3 เนื่องจากมีชนิดดั้งเดิมอยู่ int ค่าทั้งหมดจะถูกตั้งค่าเป็น 0 โดยค่าเริ่มต้น ตัวอย่างเช่น,

    intArray[2]; // Will return 0
  2. ใช้วงเล็บเหลี่ยมกล่อง [] หน้าชื่อตัวแปร

    int[] intArray = new int[3];
    intArray[0] = 1;  // Array content is now {1, 0, 0}
  3. กำหนดค่าเริ่มต้นและให้ข้อมูลกับอาร์เรย์

    int[] intArray = new int[]{1, 2, 3};

    คราวนี้ไม่จำเป็นต้องพูดถึงขนาดในวงเล็บกล่อง แม้แต่ตัวแปรอย่างง่ายของสิ่งนี้ก็คือ:

    int[] intArray = {1, 2, 3, 4};
  4. อาร์เรย์ที่มีความยาว 0

    int[] intArray = new int[0];
    int length = intArray.length; // Will return length 0

    คล้ายกับอาร์เรย์หลายมิติ

    int intArray[][] = new int[2][3];
    // This will create an array of length 2 and
    //each element contains another array of length 3.
    // { {0,0,0},{0,0,0} }
    int lenght1 = intArray.length; // Will return 2
    int length2 = intArray[0].length; // Will return 3

ใช้วงเล็บกล่องก่อนตัวแปร:

    int[][] intArray = new int[2][3];

ไม่เป็นไรถ้าคุณวางวงเล็บหนึ่งกล่องไว้ท้าย:

    int[] intArray [] = new int[2][4];
    int[] intArray[][] = new int[2][3][4]

ตัวอย่างบางส่วน

    int [] intArray [] = new int[][] {{1,2,3},{4,5,6}};
    int [] intArray1 [] = new int[][] {new int[] {1,2,3}, new int [] {4,5,6}};
    int [] intArray2 [] = new int[][] {new int[] {1,2,3},{4,5,6}}
    // All the 3 arrays assignments are valid
    // Array looks like {{1,2,3},{4,5,6}}

ไม่บังคับว่าองค์ประกอบภายในแต่ละรายการมีขนาดเท่ากัน

    int [][] intArray = new int[2][];
    intArray[0] = {1,2,3};
    intArray[1] = {4,5};
    //array looks like {{1,2,3},{4,5}}

    int[][] intArray = new int[][2] ; // This won't compile. Keep this in mind.

คุณต้องตรวจสอบให้แน่ใจว่าคุณใช้ไวยากรณ์ข้างต้นหรือไม่ว่าทิศทางไปข้างหน้าคุณต้องระบุค่าในวงเล็บเหลี่ยม มิเช่นนั้นจะไม่รวบรวม ตัวอย่างบางส่วน:

    int [][][] intArray = new int[1][][];
    int [][][] intArray = new int[1][2][];
    int [][][] intArray = new int[1][2][3];

คุณสมบัติที่สำคัญอีกประการหนึ่งคือcovariant

    Number[] numArray = {1,2,3,4};   // java.lang.Number
    numArray[0] = new Float(1.5f);   // java.lang.Float
    numArray[1] = new Integer(1);    // java.lang.Integer
   // You can store a subclass object in an array that is declared
   // to be of the type of its superclass.
   // Here 'Number' is the superclass for both Float and Integer.

   Number num[] = new Float[5]; // This is also valid

สำคัญ: สำหรับประเภทอ้างอิงค่าเริ่มต้นที่เก็บไว้ในอาร์เรย์เป็นโมฆะ


2

คุณสามารถทำได้ด้วยjava.util.Arrays:

List<String> number = Arrays.asList("1", "2", "3");

Out: ["1", "2", "3"]

อันนี้ค่อนข้างเรียบง่ายและตรงไปตรงมา


ฉันไม่เห็นคำตอบอื่น ๆ ดังนั้นฉันคิดว่าฉันสามารถเพิ่มได้
Sylhare

1
รายการไม่ใช่อาร์เรย์
Tirno

บางคนหมายถึงอาร์เรย์เมื่อพวกเขาต้องการรายการ
Sylhare


1

Array มีสองประเภทพื้นฐาน

อาร์เรย์แบบคงที่:อาร์เรย์ขนาดคงที่ (ขนาดของมันควรจะประกาศเมื่อเริ่มต้นและไม่สามารถเปลี่ยนแปลงได้ในภายหลัง)

Dynamic Array:ไม่ จำกัด ขนาดสำหรับสิ่งนี้ (อาร์เรย์แบบไดนามิกที่แท้จริงไม่มีอยู่ใน Java แต่จะสนับสนุนรายการมากที่สุด)

ในการประกาศอาเรย์แบบคงที่ของจำนวนเต็มสตริงลอย ฯลฯ ... ใช้การประกาศการร้องและการกำหนดค่าเริ่มต้น

    int[] intArray = new int[10]; 
    String[] intArray = new int[10]; 
    float[] intArray = new int[10]; 
    
   // here you have 10 index starting from 0 to 9

ในการใช้คุณสมบัติแบบไดนามิกคุณต้องใช้รายการ ... รายการเป็นอาร์เรย์แบบไดนามิกที่แท้จริงและไม่จำเป็นต้องประกาศขนาดตั้งแต่เริ่มต้น ร้องเป็นวิธีที่เหมาะสมในการประกาศรายการใน JAVA>

        ArrayList<String> myArray = new ArrayList<String>();
        myArray.add("Value 1: something");
        myArray.add("Value 2: something more");


1
ขอบคุณ @Matheus สำหรับการปรับปรุงคำตอบของฉัน ฉันจะขอให้คุณลงคะแนนในสิ่งนี้เพื่อให้สามารถเข้าถึงผู้ใช้มากขึ้น
Zia Muhammad

0

ประกาศ Array: int[] arr;

เตรียมใช้งานอาร์เรย์: int[] arr = new int[10];10 หมายถึงจำนวนองค์ประกอบที่อนุญาตในอาร์เรย์

ประกาศอาร์เรย์หลายมิติ: int[][] arr;

เริ่มต้นอาร์เรย์หลายมิติ: int[][] arr = new int[10][17]; 10 แถวและ 17 คอลัมน์และองค์ประกอบ 170 รายการเนื่องจาก 10 คูณ 17 คือ 170

การเริ่มต้นอาร์เรย์หมายถึงการระบุขนาดของมัน


0

มันง่ายมากที่จะประกาศและเริ่มต้นอาร์เรย์ ตัวอย่างเช่นคุณต้องการบันทึกองค์ประกอบจำนวนเต็มห้าองค์ประกอบซึ่ง ได้แก่ 1, 2, 3, 4 และ 5 ในอาร์เรย์ คุณสามารถทำได้ด้วยวิธีต่อไปนี้:

ก)

int[] a = new int[5];

หรือ

ข)

int[] a = {1, 2, 3, 4, 5};

ดังนั้นรูปแบบพื้นฐานสำหรับการเริ่มต้นและการประกาศโดยวิธี a) คือ:

datatype[] arrayname = new datatype[requiredarraysize];

datatype ควรเป็นตัวพิมพ์เล็ก

ดังนั้นรูปแบบพื้นฐานสำหรับการเริ่มต้นและการประกาศโดยวิธีการคือ:

ถ้าเป็นอาร์เรย์สตริง:

String[] a = {"as", "asd", "ssd"};

หากเป็นอาร์เรย์อักขระ:

char[] a = {'a', 's', 'w'};

สำหรับ float double รูปแบบของอาร์เรย์จะเหมือนกับจำนวนเต็ม

ตัวอย่างเช่น:

double[] a = {1.2, 1.3, 12.3};

แต่เมื่อคุณประกาศและเริ่มต้นอาร์เรย์โดย "วิธีการ" คุณจะต้องป้อนค่าด้วยตนเองหรือโดยวงหรืออะไร

แต่เมื่อคุณทำด้วย "เมธอด b" คุณจะไม่ต้องป้อนค่าด้วยตนเอง


0

Array สามารถมีชนิดข้อมูลพื้นฐานเช่นเดียวกับวัตถุของคลาสขึ้นอยู่กับคำนิยามของอาร์เรย์ ในกรณีของชนิดข้อมูลดั้งเดิมค่าจริงจะถูกเก็บไว้ในตำแหน่งหน่วยความจำต่อเนื่อง ในกรณีของวัตถุของชั้นเรียนวัตถุจริงจะถูกเก็บไว้ในส่วนของกอง


อาร์เรย์หนึ่งมิติ:
รูปแบบทั่วไปของการประกาศอาร์เรย์หนึ่งมิติคือ

type var-name[];
OR
type[] var-name;

อินสแตนซ์อาร์เรย์ใน Java

var-name = new type [size];

ตัวอย่างเช่น

    int intArray[];    //declaring array
    intArray = new int[20];  // allocating memory to array
    // the below line is equals to line1 + line2
    int[] intArray = new int[20]; // combining both statements in one
     int[] intArray = new int[]{ 1,2,3,4,5,6,7,8,9,10 }; 
    // accessing the elements of the specified array
    for (int i = 0; i < intArray.length; i++)
    System.out.println("Element at index " + i + " : "+ intArray[i]);

Ref: https://www.geeksforgeeks.org/arrays-in-java/


0

อีกตัวอย่างเต็มรูปแบบกับคลาสภาพยนตร์😋

public class A {

        public static void main(String[] args) {

                class Movie{

                    String movieName;
                    String genre;
                    String movieType;
                    String year;
                    String ageRating;
                    String rating;

                    public Movie(String [] str)
                    {
                        this.movieName = str[0];
                        this.genre = str[1];
                        this.movieType = str[2];
                        this.year = str[3];
                        this.ageRating = str[4];
                        this.rating = str[5];    
                    }

                }

                String [] movieDetailArr = {"Inception", "Thriller", "MovieType", "2010", "13+", "10/10"};

                Movie mv = new Movie(movieDetailArr);

                System.out.println("Movie Name: "+ mv.movieName);
                System.out.println("Movie genre: "+ mv.genre);
                System.out.println("Movie type: "+ mv.movieType);
                System.out.println("Movie year: "+ mv.year);
                System.out.println("Movie age : "+ mv.ageRating);
                System.out.println("Movie  rating: "+ mv.rating);


            }

        } 

-1
int[] x=new int[enter the size of array here];

ตัวอย่าง:

int[] x=new int[10];

หรือ

int[] x={enter the elements of array here];

ตัวอย่าง:

int[] x={10,65,40,5,48,31};

-7
int[] SingleDimensionalArray = new int[2]

int[][] MultiDimensionalArray = new int[3][4]

6
ในขณะที่รหัสนี้อาจตอบคำถามมันจะดีกว่าที่จะอธิบายวิธีการแก้ปัญหาโดยไม่ต้องแนะนำคนอื่น ๆ และทำไมต้องใช้มัน คำตอบแบบรหัสเท่านั้นไม่มีประโยชน์ในระยะยาว
Bono
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.