ที่มา: FreeCodeCamp ในบทความนี้ คุณจะได้เรียนรู้วิธีการใช้เมธอด Arrays.binarySearch() ใน Java
Arrays.binarySearch() ใน Java คืออะไร
เอกสารอย่างเป็นทางการสำหรับ สถานะเมธอด Arrays.binarySearch() :- วิธีการนี้ค้นหาอาร์เรย์ไบต์ที่ระบุสำหรับค่าที่ระบุโดยใช้อัลกอริธึมการค้นหาแบบไบนารี
- จะต้องเรียงลำดับอาร์เรย์ (โดยใช้ เมธอดsort(byte[]) ) ก่อนที่จะทำการโทร หากไม่เรียงลำดับก็จะไม่สามารถกำหนดผลลัพธ์ได้
- หากอาร์เรย์มีหลายองค์ประกอบที่มีค่าที่ระบุ ก็ไม่รับประกันว่าจะพบองค์ประกอบใด
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
char vowels[] = {'a', 'e', 'i', 'o', 'u'};
char key = 'i';
int foundItemIndex = Arrays.binarySearch(vowels, key);
System.out.println("The given vowel is at index: " + foundItemIndex);
}
}
เมธอดArrays.binarySearch()รับอาร์เรย์ที่คุณต้องการค้นหาเป็นอาร์กิวเมนต์แรก และคีย์ที่คุณกำลังค้นหาเป็นอาร์กิวเมนต์ที่สอง ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น:
สระที่กำหนดอยู่ที่ดัชนี: 2
โปรดจำไว้ว่าวิธีการส่งคืนดัชนีขององค์ประกอบที่พบ ไม่ใช่องค์ประกอบนั้นเอง วิธีนี้ทำให้คุณสามารถจัดเก็บดัชนีเป็นจำนวนเต็มเหมือนกับที่ใช้ในตัวอย่างนี้ได้ ตามค่าเริ่มต้น วิธีการนี้จะใช้ดัชนีแรกของอาร์เรย์เป็นจุดเริ่มต้นของการค้นหา และความยาวของอาร์เรย์เป็นจุดสิ้นสุดของการค้นหา ในกรณีนี้ ดัชนีเริ่มต้นคือ 0 และดัชนีสิ้นสุดคือ 6 แทนที่จะใช้ดัชนีเริ่มต้นและสิ้นสุดเริ่มต้น คุณสามารถกำหนดดัชนีด้วยตนเองได้ ตัวอย่างเช่น หากคุณต้องการค้นหาจากดัชนี 2 ถึงดัชนี 4 คุณสามารถทำได้ดังนี้:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
char vowels[] = {'a', 'e', 'i', 'o', 'u'};
char key = 'i';
int startIndex = 2;
int endIndex = 4;
int foundItemIndex = Arrays.binarySearch(vowels, startIndex, endIndex, key);
System.out.println("The given vowel is at index: " + foundItemIndex);
}
}
ในกรณีนี้ เมธอดArrays.binarySearch()จะใช้อาร์เรย์ที่คุณต้องการค้นหาเป็นอาร์กิวเมนต์แรก ดัชนีเริ่มต้นเป็นอาร์กิวเมนต์ที่สอง ดัชนีสิ้นสุดเป็นอาร์กิวเมนต์ที่สาม และคีย์เป็นอาร์กิวเมนต์ที่สี่ ตราบใดที่คุณรักษาดัชนีสิ้นสุดไว้ตามความยาวของอาร์เรย์ วิธีการนี้ก็ควรจะทำงานได้ดี แต่ถ้าคุณเกิน กว่านั้น คุณจะได้รับArray index อยู่นอกช่วง ข้อยกเว้น มันค่อนข้างง่ายใช่มั้ย? วิธีการส่งกลับดัชนีขององค์ประกอบหากพบ แต่จะเกิดอะไรขึ้นถ้ามันไม่พบองค์ประกอบที่กำหนด?
จะเกิดอะไรขึ้นเมื่อ Arrays.binarySearch() ไม่พบองค์ประกอบที่กำหนด
ลองมาดูเอกสาร อย่างเป็นทางการ สำหรับ วิธีการ Arrays.binarySearch() อีกครั้ง :- วิธีการค้นหาดัชนีของคีย์ในผลการค้นหาหากมีอยู่ในอาร์เรย์ภายในช่วงที่ระบุ มิฉะนั้นเราจะได้รับ(-(จุดแทรก) - 1 )
- จุดแทรกถูกกำหนดให้เป็นจุดที่จะแทรกคีย์ลงในอาร์เรย์: ดัชนีขององค์ประกอบแรกในช่วงมีค่ามากกว่าคีย์ หรือ toIndex (ดัชนีสิ้นสุด) หากองค์ประกอบทั้งหมดในช่วงน้อยกว่า คีย์ที่ระบุ
- โปรดทราบว่าค่าที่ส่งคืนจะมากกว่าหรือเท่ากับ 0 เมื่อพบคีย์เท่านั้น
(-(ดัชนีขององค์ประกอบแรกที่มีขนาดใหญ่กว่าคีย์ค้นหา) - 1) = (0 - 1) = -1
คุณสามารถนำไปใช้ในข้อมูลโค้ดดังนี้:
package arrays;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int numbers[] = {5, 6, 7, 8, 9, 10};
System.out.println(Arrays.binarySearch(numbers, 0)); // -1
}
}
สมมติว่าเรามีอาร์เรย์[5, 6, 7, 8, 9, 10]และคีย์การค้นหาเป็น12ซึ่งเห็นได้ชัดว่าไม่อยู่ในอาร์เรย์ ในกรณีนี้ แป้นค้นหาจะมีค่ามากกว่าองค์ประกอบทั้งหมดของอาร์เรย์ ที่นี่จุดแทรกจะเป็นดังนี้:
(-(ดัชนีสิ้นสุด (-(6) - 1) = (-6 - 1) = -7
โปรดจำไว้ว่าหากคุณไม่ได้ระบุดัชนีสิ้นสุด ด้วย ตนเอง วิธีการนี้จะใช้ความยาวของอาร์เรย์เป็นดัชนีสิ้นสุด ซึ่งในกรณีนี้คือ6 คุณสามารถนำไปใช้ในข้อมูลโค้ดดังนี้:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int numbers[] = {5, 6, 7, 8, 9, 10};
System.out.println(Arrays.binarySearch(numbers, 12)); // -7
}
}
อย่างไรก็ตาม ผลลัพธ์จะเปลี่ยนไปหากคุณกำหนดดัชนีเริ่มต้นและสิ้นสุดด้วยตนเอง:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int numbers[] = {5, 6, 7, 8, 9, 10};
int startIndex = 1;
int endIndex = 3;
System.out.println(Arrays.binarySearch(numbers, startIndex, endIndex, 5)); // -2
System.out.println(Arrays.binarySearch(numbers, startIndex, endIndex, 10)); // -4
}
}
ลองคำนวณค่าด้วยตัวเอง คุณยังสามารถใช้ เมธอด Arrays.binarySearch()กับสัญลักษณ์ดังนี้:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
char vowels[] = {'a', 'e', 'i', 'o', 'u'};
char key = 'i';
int startIndex = 2;
int endIndex = 4;
System.out.println(Arrays.binarySearch(vowels, startIndex, endIndex, key));
}
}
ใช้หลักการเดียวกันนี้หากไม่พบคีย์ค้นหาที่ระบุ แต่เมื่อเปรียบเทียบระหว่างอักขระในอาร์เรย์และคีย์ค้นหาที่กำหนด รหัส ASCII ของอักขระที่เกี่ยวข้องจะถูกนำมาใช้ นั่นคือA (65)จะน้อยกว่า(97 ) คำนึงถึงสิ่งนี้เมื่อตรวจสอบผลลัพธ์ของโปรแกรมของคุณ
GO TO FULL VERSION