Array Length ใน Java


101

ฉันประกาศอาร์เรย์ดังที่แสดงด้านล่าง:

int[] arr = new int[10];

จากนั้นฉันกำหนดค่าต่อไปนี้ให้กับอาร์เรย์:

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

จากนั้นฉันก็ประกาศและเริ่มต้นตัวแปรจำนวนเต็ม:

int arrayLength = arr.length;

สิ่งนี้จะเป็นประโยชน์ในการค้นหาขนาดจริง แต่มีวิธีใดในการค้นหาขนาดลอจิคัลของอาร์เรย์หรือไม่?

คำตอบ:


86

ประกอบด้วยขนาดที่จัดสรร, 10. ดัชนียังไม่ได้กำหนดจะมีค่าเริ่มต้นซึ่งเป็นสำหรับ0int


3
ใช่อาร์เรย์เป็นการจัดสรรหน่วยความจำแบบคงที่
Ramon Saraiva

3
คุณสามารถแสดง javadoc ได้หรือไม่? ฉันไม่รู้ว่าคุณสมบัติ "ความยาว" นี้อยู่ที่ไหน
Philip Rego

1
@PhilipRego มันอยู่ในข้อกำหนดภาษาdocs.oracle.com/javase/specs/jls/se8/html/jls-10.html#jls-10.3
Torben

71

ประการแรกlengthเป็นคุณสมบัติดังนั้นจึงจะarr.lengthแทนที่arr.length()แทน

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


ไม่สามารถเรียกใช้ length () บนอาร์เรย์ประเภท long [] Java (67108980)
Alessandro Ornano

22

ในการหาความยาวของอาร์เรย์Aคุณควรใช้lengthคุณสมบัติ เป็นA.lengthอย่าใช้A.length()เป็นหลักสำหรับขนาดของวัตถุที่เกี่ยวข้องกับสตริง

ป้อนคำอธิบายภาพที่นี่

คุณสมบัติ length จะแสดงพื้นที่ที่จัดสรรทั้งหมดให้กับอาร์เรย์ในระหว่างการเริ่มต้นเสมอ

หากคุณเคยมีปัญหาเหล่านี้วิธีง่ายๆคือเรียกใช้ ขอให้มีความสุขในการเขียนโปรแกรม!


6

อาร์เรย์เป็นการจัดสรรหน่วยความจำแบบคงที่ดังนั้นหากคุณเตรียมข้อมูลเบื้องต้นของจำนวนเต็ม:

int[] intArray = new int[15];

ความยาวจะเสมอกัน 15ไม่ว่าจะใส่ดัชนีมากแค่ไหนก็ตาม

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


5

ใน Java ขนาด "จริง" และ "ตรรกะ" ของคุณจะเท่ากัน รันไทม์เติมสล็อตอาร์เรย์ทั้งหมดด้วยค่าเริ่มต้นเมื่อมีการจัดสรร ของคุณaมี 10


5

ในกรณีนี้ arr.length จะส่งกลับ 10 ขนาดของอาร์เรย์ที่คุณจัดสรร ขนาดตรรกะใช้ไม่ได้จริง ๆ ที่นี่เนื่องจากเป็นอาร์เรย์ที่มีความยาวคงที่

เมื่อคุณเริ่มต้นอาร์เรย์:

int[] arr = new int[10];

Java จะสร้างอาร์เรย์ที่มี 10 องค์ประกอบและเริ่มต้นสิ่งเหล่านี้เป็น 0 ดูข้อมูลจำเพาะภาษา Javaสำหรับรายละเอียดของค่าเริ่มต้นสำหรับสิ่งนี้และประเภทดั้งเดิมอื่น ๆ


4
int[] arr = new int[10];

arrเป็นอาร์เรย์ชนิดที่มีขนาดint 10มันคืออาร์เรย์ของ10องค์ประกอบ หากเราไม่เริ่มต้นอาร์เรย์โดยองค์ประกอบอาร์เรย์เริ่มต้นจะมีค่าเริ่มต้น ในกรณีของค่าเริ่มต้นของอาร์เรย์ int คือ0อาร์เรย์เริ่มต้นคือ

length เป็นคุณสมบัติที่ใช้ได้กับอาร์เรย์
ที่นี่จะให้arr.length10


3

`

int array [] = int ใหม่ [3]; array.length;

ดังนั้นที่นี่เราได้สร้างอาร์เรย์ที่มีพื้นที่หน่วยความจำ 3 ... นี่คือลักษณะที่แท้จริง

0th 1st 2nd ........... > ดัชนี 2 4 5 ........... > เลข

ดังนั้นเมื่อคุณเห็นขนาดของอาร์เรย์นี้คือ 3 แต่ดัชนีของอาร์เรย์มีค่าสูงสุดเพียง 2 เนื่องจากอาร์เรย์ใด ๆ เริ่มต้นด้วยดัชนีที่ 0

ผลลัพธ์ของคำสั่งที่สองจะเป็น 3 เนื่องจากความยาวของอาร์เรย์คือ 3 ... โปรดอย่าสับสนระหว่างค่าดัชนีและความยาวของอาร์เรย์ ....

ไชโย!


2
  int arr[]={4,7,2,21321,657,12321};
  int length =arr.length;
  System.out.println(length); // will return 6

  int arr2[] = new int[10];
   arr2[3] = 4;
  int length2 =arr2.length;
  System.out.println(length2); // // will return 10. all other digits will be 0 initialize because staic memory initialization

1

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


1

ประกอบด้วยขนาดที่จัดสรร 10 ดัชนีที่เหลือจะมีค่าเริ่มต้นซึ่งเป็น 0


1

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


นี่เป็นเพียงขนาด "ฉันถือว่า 0 ไม่ใช่ค่าที่ถูกต้อง" และหากเป็นประโยชน์ก็เป็นหนี้สงสัยจะสูญ
ทอม

ฉันเพิ่งคิดขึ้นมาเพื่อรับความยาวของอาร์เรย์ (0 ไม่ถูกต้อง) อย่างที่ฉันบอกว่าคุณสามารถใช้คอลเลกชันเพื่อการจัดการข้อมูลที่แม่นยำยิ่งขึ้น
Struse

1

มันควรจะเป็น:

int a = arr.length;

ควรหลีกเลี่ยงวงเล็บ


5
ยินดีต้อนรับสู่ stack overflow! เนื่องจากคำถามนี้เป็นคำถามที่มีอายุมากกว่าหนึ่งปีและมีคำตอบอีกหกข้อแล้วฉันจึงคาดหวังคำตอบที่ยาวนานกว่านี้ ยิ่งไปกว่านั้นคุณไม่ได้ตอบคำถาม - เพียงแก้ไขการพิมพ์ผิดที่กำหนดเป้าหมายไว้แล้วในคำตอบ (ซึ่งตอบคำถาม) และความคิดเห็นของคำถาม
John Dvorak

0

อาร์เรย์ Java ได้รับการแก้ไขในขนาดจริงและคำตอบอื่น ๆ อธิบายว่า. length ไม่ได้ทำตามที่คุณคาดหวังจริงๆ ฉันแค่อยากจะเพิ่มคำถามของคุณสิ่งที่คุณอาจต้องการใช้คือ ArrayList นั่นคืออาร์เรย์ที่สามารถขยายและลดขนาดได้:

https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html

วิธีการ. size () จะแสดงจำนวนองค์ประกอบในรายการของคุณและคุณสามารถขยายได้เมื่อคุณเพิ่มสิ่งต่างๆ


0

ถ้าคุณหมายถึง "ขนาดตรรกะ" ดัชนีของอาร์เรย์แล้วก็แค่ int arrayLength = arr.length-1; เนื่องจากดัชนีอาร์เรย์เริ่มต้นด้วย "0" ดังนั้นโลจิคัลหรือ "ดัชนีอาร์เรย์" จะน้อยกว่าขนาดจริงเสมอ "หนึ่ง"


0

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

public int logicalArrayLength(type[] passedArray) {
    int count = 0;
    for (int i = 0; i < passedArray.length; i++) {
        if (passedArray[i] != defaultValue) {
            count++;
        }
    }
    return count;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.