1. Arrays
ชั้นเรียน
ดังที่เราได้กล่าวไว้ก่อนหน้านี้ อาร์เรย์มีประโยชน์มากและใช้บ่อยในการเขียนโปรแกรม
ผู้สร้าง Java สังเกตได้อย่างรวดเร็วว่าโปรแกรมเมอร์ Java มักจะเขียนโค้ดเดียวกันเมื่อทำงานกับอาร์เรย์ ตัวอย่างเช่น คัดลอกส่วนหนึ่งของอาร์เรย์ไปยังอาร์เรย์อื่น โค้ดเพื่อเติมแต่ละเซลล์ของอาร์เรย์ด้วยค่าเดียวกัน แสดงเนื้อหาของอาร์เรย์ในรูปแบบที่สะดวก เป็นต้น
นั่นเป็นเหตุผลที่พวกเขาสร้างArrays
คลาสพิเศษ (ชื่อเต็มของมันคือjava.util.Arrays
) โดยใส่การกระทำที่เกี่ยวข้องกับอาร์เรย์ที่ได้รับความนิยมสูงสุดเข้าไป
มันมีวิธีการมากมายสำหรับทุกโอกาส แต่ก่อนอื่นเราจะพิจารณาเพียง 10 วิธี — วิธีที่ง่ายที่สุดและใช้บ่อยที่สุด
2.Arrays.toString()
วิธีแรกที่เราจะดูเรียกArrays.toString()
ว่า แต่ก่อนอื่นพื้นหลังเล็กน้อย
แต่ละอาร์เรย์ใน Java มีtoString()
เมธอดซึ่งส่งคืน 'การแสดงข้อความของอาร์เรย์' คุณสามารถรับข้อความแทนอาร์เรย์โดยใช้คำสั่งต่อไปนี้:
String str = name.toString();
name
ชื่อของตัวแปรอาร์เรย์อยู่ที่ไหน และ str
เป็นชื่อของตัวแปรที่จะเก็บการแสดงสตริงของอาร์เรย์
แต่ถ้าคุณพยายามพิมพ์อาร์เรย์ไปที่หน้าจอโดยใช้เมธอด คุณมักจะเห็นสิ่งนี้:System.out.println(name)
I@37afeb11
ตัวอักษรตัวแรกI
หมายความว่าเป็นint
อาร์เรย์ และสัญลักษณ์ตามหลัง@
คือที่อยู่ของอาร์เรย์ในหน่วยความจำ ในแง่หนึ่ง นี่คือข้อมูลที่จัดเก็บไว้ในตัวแปรอาร์เรย์อย่างแม่นยำ แต่ในอีกแง่หนึ่ง เราคาดหวังสิ่งที่แตกต่างออกไปใช่ไหม
เราต้องการเห็นค่าในอาร์เรย์! และนั่นคือเหตุผลที่พวกเขาคิดวิธีการขึ้นมาArrays.toString()
— เพื่อแสดงค่าของอาร์เรย์ เราเรียกสิ่งนี้ว่า:
String str = Arrays.toString(name);
ตัวอย่าง:
|
ตัวแปรstr จะมีสตริง:
|
|
ตัวแปรstr จะมีสตริง:
|
|
ตัวแปรstr จะมีสตริง:
|
3.Arrays.deepToString()
แต่ถ้าคุณพยายามแปลงอาร์เรย์สองมิติเป็นusing the Arrays.toString()
เมธอดสตริง (เพื่อแสดง) คุณจะเห็นสิ่งที่คุ้นเคย:
[I@37afeb11, I@37afeb21, I@37afeb31]
ทั้งหมดนี้เป็นเพราะเซลล์ของอาร์เรย์สองมิติเก็บการอ้างอิงถึงอาร์เรย์หนึ่งมิติ อาร์เรย์หนึ่งมิติถูกแปลงเป็นสตริงอย่างไร ตรงตามที่คุณเห็นด้านบน
ทำอะไรได้บ้าง? เราจะแสดงอาร์เรย์สองมิติอย่างถูกต้องได้อย่างไร
ด้วยเหตุนี้Arrays
คลาสจึงมีวิธีพิเศษอีกวิธีหนึ่งdeepToString()
— การเรียกมันมีลักษณะดังนี้:
String str = Arrays.deepToString(name);
วิธีนี้สามารถผ่านอาร์เรย์ที่เป็นสองมิติ หนึ่งมิติ สามมิติ หรือโดยทั่วไป มิติใดก็ได้ และมันจะแสดงองค์ประกอบของอาร์เรย์เสมอ
หมายเหตุ: วิธีการ นี้Arrays.deepToString()
ใช้ไม่ได้กับอาร์เรย์แบบหนึ่งมิติ (เช่นint[]
)
ตัวอย่าง:
|
ตัวแปรstr จะมีสตริง:
|
|
ตัวแปรstr จะมีสตริง:
|
|
ตัวแปรstr จะมีสตริง:
|
4.Arrays.equals()
เราทราบวิธีแสดงอาร์เรย์บนหน้าจอแล้ว แต่การเปรียบเทียบอาร์เรย์ล่ะ
ในการเปรียบเทียบสตริง เรามีequals
และequalsIgnoreCase
เมธอด แต่อาร์เรย์มีเมธอดอะไรบ้าง
ข่าวดีก็คืออาร์เรย์มีequals
เมธอด ข่าวร้ายคือมันไม่ได้เปรียบเทียบเนื้อหาของอาร์เรย์ วิธีequals
การของอาร์เรย์ทำสิ่งเดียวกันกับ==
ตัวดำเนินการ นั่นคือการเปรียบเทียบการอ้างอิง ตัวอย่าง:
ตัวอย่าง:
|
false (การอ้างอิงไม่เท่ากัน) |
|
วิธีequals การarrays เปรียบเทียบการอ้างอิงของอาร์เรย์สองตัว false (การอ้างอิงไม่เท่ากัน) |
ทำอะไรได้บ้าง? เราจะเปรียบเทียบอาร์เรย์ตามเนื้อหาได้อย่างไร
และอีกครั้งก็Arrays
มาถึงการช่วยเหลือของเราหรือโดยเฉพาะอย่างยิ่งArrays.equals()
วิธีการ ของมัน นี่คือวิธีที่เราเรียกว่า:
Arrays.equals(name1, name2)
เมธอดจะส่งกลับtrue
หากอาร์เรย์มีความยาวเท่ากันและองค์ประกอบเท่ากัน มิฉะนั้นจะส่งfalse
กลับ
ตัวอย่าง:
|
วิธีequals การarrays เปรียบเทียบการอ้างอิงของอาร์เรย์สองตัว false (การอ้างอิงไม่เท่ากัน) |
|
true (เนื้อหาเท่ากัน) |
|
false (เนื้อหาของอาร์เรย์จะแตกต่างกัน) |
5.Arrays.deepEquals()
และอย่างที่คุณเดาได้แล้วว่าArrays.equals
เมธอดนี้จะทำงานไม่ถูกต้องสำหรับอาร์เรย์สองมิติ: มันถือว่าอาร์เรย์สองมิติเหมือนกับอาร์เรย์หนึ่งมิติที่มีองค์ประกอบเป็นแอดเดรสของอาร์เรย์หนึ่งมิติ
ดังนั้น เพื่อเปรียบเทียบอาร์เรย์หลายมิติ ( ) อย่างถูกต้อง พวกเขาจึงคิด วิธีการn = 1, 2, 3,...
ขึ้นมา Arrays.deepEquals()
การเรียกมันมีลักษณะดังนี้:
Arrays.deepEquals(name1, name2)
วิธีการส่งกลับtrue
ถ้าอาร์เรย์มีความยาวเท่ากันและองค์ประกอบเท่ากัน มิฉะนั้นจะกลับมาfalse
. หากองค์ประกอบภายในอาร์เรย์เป็นอาร์เรย์ด้วย ก็จะArrays.deepEquals()
ใช้วิธีเปรียบเทียบองค์ประกอบเหล่านั้นไปเรื่อยๆ
ตัวอย่าง:
|
วิธีequals การarrays เปรียบเทียบการอ้างอิงของอาร์เรย์สองตัว false (การอ้างอิงไม่เท่ากัน) |
|
วิธีArrays.equals การจะเปรียบเทียบและเป็นอาร์เรย์หนึ่งมิติที่เก็บการอ้างอิง พวกเขามีการอ้างอิงที่แตกต่างกัน (เนื้อหาของอาร์เรย์ไม่เท่ากัน) x1 x2 false |
|
true (เนื้อหาเท่ากัน) |
GO TO FULL VERSION