"Amigo ฉันหวังว่าตอนนี้คุณคงรู้แล้วว่าอาร์เรย์มีประโยชน์อย่างไรในการเขียนโปรแกรม"
"แน่นอนที่สุด ริชิ! ฉันแก้ไขงานมากกว่าหนึ่งงานแล้ว"
"งานของคุณมีการกระทำซ้ำๆ หรือไม่ ประเภทที่คุณทำซ้ำแล้วซ้ำอีก"
"ถ้าฉันเข้าใจคุณถูกต้อง คุณหมายถึงการกระทำที่คล้ายกันในงานต่างๆ กันใช่ไหม ตัวอย่างเช่น ทุกที่ที่ใช้การวนซ้ำเพื่อแสดงเนื้อหาของอาร์เรย์ — ฉันเหนื่อยมากที่จะทำแบบนั้น!"
"ใช่ นั่นคือสิ่งที่ฉันหมายถึง ผู้สร้าง Java สังเกตเห็นว่าโปรแกรมเมอร์ Java มักจะเขียนโค้ดเดียวกันเมื่อทำงานกับอาร์เรย์ ตัวอย่างเช่น โค้ดเพื่อคัดลอกส่วนหนึ่งของอาร์เรย์ไปยังอาร์เรย์อื่น หรือโค้ดเพื่อเติมแต่ละเซลล์ของอาร์เรย์ด้วยเซลล์เดียวกัน ค่า หรือตัวอย่างของคุณ: รหัสเพื่อแสดงเนื้อหาของอาร์เรย์ในรูปแบบที่อ่านได้บนหน้าจอ
"และโปรแกรมเมอร์ตัวจริงมีกฎที่สำคัญมากข้อหนึ่ง: อย่าทำซ้ำตัวเอง คุณจะยอมรับว่ามันผิดที่จะทำงานที่ฟุ่มเฟือย - คุณจะไม่ได้รับเงินจากการทำงานนั้น เชื่อฉันเถอะ งานที่มีประสิทธิภาพจะได้รับค่าตอบแทนที่ดี อนึ่ง มือใหม่ รหัสสามารถจดจำได้ทันทีด้วยรหัสซ้ำจำนวนมาก
"ผู้สร้างของ Java คิดเรื่องนี้และสร้างArrays
คลาสพิเศษ (ชื่อเต็มของมันคือjava.util.Arrays
) โดยใส่การกระทำที่เกี่ยวข้องกับอาร์เรย์ที่เป็นที่นิยมที่สุดลงไป"
"อืม... น่าสนใจดี แล้วมันมีอะไรกันแน่?
"มีหลายวิธีสำหรับทุกโอกาส แต่ก่อนอื่นเราจะพิจารณาเพียง 10 วิธีเท่านั้น ซึ่งเป็นวิธีที่ง่ายที่สุดและใช้บ่อยที่สุด
Arrays.toString()
"วิธีแรกที่เราจะดูคือArrays.toString()
แต่ก่อนอื่น พื้นหลังเล็กน้อย
"อาร์เรย์แต่ละตัวใน Java มีtoString()
เมธอดซึ่งส่งคืน 'การแสดงข้อความของอาร์เรย์' คุณสามารถรับการแสดงข้อความของอาร์เรย์โดยใช้คำสั่งต่อไปนี้:
String str = name.toString();
" name
ชื่อของตัวแปรอาร์เรย์อยู่ที่ไหนและstr
เป็นชื่อของตัวแปรที่จะเก็บการแสดงสตริงของอาร์เรย์ Amigo คุณได้ลองพิมพ์อาร์เรย์ไปที่หน้าจอโดยใช้เมธอดแล้วหรือยัง?System.out.println(name)
ฉันสารภาพว่ามันเกิดขึ้น ฉันเห็นบางอย่างซึ่งพูดพล่อยๆ ฉันตัดสินใจหลีกเลี่ยงอันตรายและใช้ลูปต่อไป
"เป็นไปได้มากว่าคุณจะเห็นบางอย่างเช่น:
I@37afeb11
"ตัวอักษรตัวแรกI
หมายความว่ามันเป็นint
อาร์เรย์ และสัญลักษณ์ตามหลัง@
คือที่อยู่ของออบเจกต์เดียวในหน่วยความจำ คุณสามารถคิดว่ามันเป็นที่อยู่ของอาร์เรย์ในหน่วยความจำ ในแง่หนึ่ง นี่คือข้อมูลที่จัดเก็บไว้ใน ตัวแปรอาร์เรย์ แต่อีกอัน คุณคาดหวังสิ่งที่แตกต่างออกไป ใช่ไหม"
"แน่นอน! ฉันวางแผนที่จะดูค่าในอาร์เรย์ นี่เป็นสิ่งสุดท้ายที่ฉันคาดไว้"
"และนั่นคือเหตุผลว่าทำไมพวกเขาถึงคิดArrays.toString()
วิธีการ - เพื่อแสดงค่าของอาร์เรย์ เราเรียกมันว่า:
String str = Arrays.toString(name);
ตัวอย่าง:
|
ตัวแปรstr จะประกอบด้วยสตริง"[1, 2, 3]" |
|
ตัวแปรstr จะประกอบด้วยสตริง"[]" |
|
ตัวแปรstr จะประกอบด้วยสตริง"[Hi, How's, life?]" |
Arrays.deepToString()
"อย่างไรก็ตามtoString()
วิธีการนี้ไม่เพียงพอเมื่อพูดถึงอาร์เรย์สองมิติ กล่าวอีกนัยหนึ่ง ถ้าคุณพยายามเรียกArrays.toString()
คุณจะเห็นสิ่งที่คุ้นเคย:
[I@37afeb11, I@37afeb21, I@37afeb31]
"ทั้งหมดนี้เป็นเพราะเซลล์ของอาร์เรย์สองมิติเก็บการอ้างอิงถึงอาร์เรย์หนึ่งมิติ และอาร์เรย์หนึ่งมิติถูกแปลงเป็นสตริงได้อย่างไร ตรงตามที่คุณเห็นด้านบน
"แล้วต้องทำอย่างไร เราจะแสดงอาร์เรย์สองมิติอย่างถูกต้องได้อย่างไร"
"ผู้สร้างของ Java ก็คาดหวังสิ่งนี้เช่นกัน ด้วยเหตุนี้Arrays
คลาสจึงมีเมธอดพิเศษอีกวิธีหนึ่ง — deepToString()
การเรียกมันมีลักษณะดังนี้:
String str = Arrays.deepToString(name);
"วิธีนี้สามารถส่งผ่านอาร์เรย์ที่เป็นสองมิติ หนึ่งมิติ สามมิติ หรือโดยทั่วไป มิติใดก็ได้ และมันจะแสดงองค์ประกอบของอาร์เรย์เสมอ
ตัวอย่าง:
|
ตัวแปรstr จะประกอบด้วยสตริง"[1, 2, 3]" |
|
ตัวแปรstr จะประกอบด้วยสตริง"[[1, 1], [2, 2], [3, 3]]" |
|
ตัวแปรstr จะประกอบด้วยสตริง"[[[1, 2, 3], [1]], [[]]]" |
Arrays.equals()
"เราหาวิธีแสดงอาร์เรย์บนหน้าจอ แล้วการเปรียบเทียบอาร์เรย์ล่ะ คุณจำวิธีที่เราใช้ในการเปรียบเทียบสตริงได้ไหม"
“ฉันมักจะใช้equals
วิธี!
"ใช่equals
และยังequalsIgnoreCase
(ซึ่งเปรียบเทียบสตริงโดยไม่คำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก)
"ข่าวดี: คุณสามารถใช้equals
เมธอดสำหรับอาร์เรย์ได้ด้วย ข่าวร้าย: มันไม่เปรียบเทียบเนื้อหาของอาร์เรย์ เมธอดequals
ของอาร์เรย์ทำสิ่งเดียวกันกับ==
โอเปอเรเตอร์ นั่นคือเปรียบเทียบการอ้างอิง
ตัวอย่าง:
|
false (การอ้างอิงไม่เท่ากัน) |
|
วิธีequals การarrays เปรียบเทียบการอ้างอิงของอาร์เรย์สองตัว false (การอ้างอิงไม่เท่ากัน) |
"แล้วเราจะทำอย่างไร เราจะเปรียบเทียบอาร์เรย์ตามเนื้อหาได้อย่างไร"
" Arrays
ชั้นเรียนมาช่วยเราอีกครั้ง โดยเฉพาะอย่างยิ่งArrays.equals()
วิธีการของมัน เราเรียกมันว่า:
Arrays.equals(name1, name2)
"เมธอดจะส่งกลับtrue
หากอาร์เรย์มีความยาวเท่ากันและองค์ประกอบเท่ากัน มิเช่นนั้นจะส่งfalse
กลับ
ตัวอย่าง:
|
วิธีequals การarrays เปรียบเทียบการอ้างอิงของอาร์เรย์สองตัว false (การอ้างอิงไม่เท่ากัน) |
|
true (เนื้อหาเท่ากัน) |
|
false (เนื้อหาของอาร์เรย์จะแตกต่างกัน) |
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 (เนื้อหาเท่ากัน) |
"ขอบคุณ Rishi! บทเรียนนี้เป็นเพียงสิ่งที่ฉันต้องการเพื่อทำให้ชีวิตของฉันง่ายขึ้นและมีความสุขมากขึ้นในอนาคต ตอนนี้ฉันจะใช้วิธีการของคลาส Arrays และเขียนโปรแกรมของฉันให้เร็วยิ่งขึ้น
"นั่นคือสิ่งที่ฉันคาดหวังไว้ ฮ่าฮ่า แต่นี่ไม่ใช่วิธีการที่น่าสนใจทั้งหมดในคลาส Arrays ฉันจะบอกคุณเกี่ยวกับวิธีอื่นในครั้งต่อไป"
GO TO FULL VERSION