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การจะเปรียบเทียบและเป็นอาร์เรย์หนึ่งมิติที่เก็บการอ้างอิง พวกเขามีการอ้างอิงที่แตกต่างกัน (เนื้อหาของอาร์เรย์ไม่เท่ากัน) x1x2false |
|
true(เนื้อหาเท่ากัน) |
GO TO FULL VERSION