JavaRush /จาวาบล็อก /Random-TH /คอฟฟี่เบรค #156. วิธีใช้เมธอด Arrays.binarySearch() ใน Ja...

คอฟฟี่เบรค #156. วิธีใช้เมธอด Arrays.binarySearch() ใน Java

เผยแพร่ในกลุ่ม
ที่มา: FreeCodeCamp ในบทความนี้ คุณจะได้เรียนรู้วิธีการใช้เมธอด Arrays.binarySearch() ใน Java คอฟฟี่เบรค #156.  วิธีใช้เมธอด Arrays.binarySearch() ใน Java - 1

Arrays.binarySearch() ใน Java คืออะไร

เอกสารอย่างเป็นทางการสำหรับ สถานะเมธอด Arrays.binarySearch() :
  • วิธีการนี้ค้นหาอาร์เรย์ไบต์ที่ระบุสำหรับค่าที่ระบุโดยใช้อัลกอริธึมการค้นหาแบบไบนารี
  • จะต้องเรียงลำดับอาร์เรย์ (โดยใช้ เมธอดsort(byte[]) ) ก่อนที่จะทำการโทร หากไม่เรียงลำดับก็จะไม่สามารถกำหนดผลลัพธ์ได้
  • หากอาร์เรย์มีหลายองค์ประกอบที่มีค่าที่ระบุ ก็ไม่รับประกันว่าจะพบองค์ประกอบใด
กล่าวง่ายๆ ก็คือ เมธอด 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 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 ) จุดแทรกอาจมีความหมายที่แตกต่างกัน ขึ้นอยู่กับคีย์การค้นหา สมมติว่าเรามีอาร์เรย์[5, 6, 7, 8, 9, 10]และคีย์การค้นหาเป็น 0ซึ่งเห็นได้ชัดว่าไม่อยู่ในอาร์เรย์ ในกรณีนี้ ปุ่มค้นหาจะน้อยกว่าองค์ประกอบทั้งหมดของอาร์เรย์ แต่องค์ประกอบแรกที่มากกว่าคีย์การค้นหาคือ5 ดังนั้นในกรณีของเราจุดแทรกจะเป็น:
(-(ดัชนีขององค์ประกอบแรกที่มีขนาดใหญ่กว่าคีย์ค้นหา) - 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 ) คำนึงถึงสิ่งนี้เมื่อตรวจสอบผลลัพธ์ของโปรแกรมของคุณ
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION