JavaRush /Блоги Java /Random-TG /Кофе-брейк №156. Чӣ тавр истифода бурдани усули Arrays.bi...

Кофе-брейк №156. Чӣ тавр истифода бурдани усули Arrays.binarySearch() дар Java

Дар гурӯҳ нашр шудааст
Манбаъ: FreeCodeCamp Бо ин мақола шумо тарзи истифодаи усули Arrays.binarySearch()-ро дар Java меомӯзед. Кофе-брейк №156.  Чӣ тавр истифода бурдани усули Arrays.binarySearch() дар Java - 1

Arrays.binarySearch() дар Java чист?

Ҳуҷҷатҳои расмии усули Arrays.binarySearch() гуфта мешавад:
  • Ин усул массиви byteҳои муайяншударо барои арзиши муайяншуда бо истифода аз алгоритми ҷустуҷӯи дуӣ ҷустуҷӯ мекунад.
  • Пеш аз занг задан массив бояд мураттаб карда шавад (бо истифода аз усули 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ро аз истиснои диапазон мегиред . Ин хеле содда аст, дуруст? Усул индекси элементро бармегардонад, агар он пайдо шавад. Аммо агар он унсури додашударо наёбад, чӣ мешавад?

Вақте ки Arrays.binarySearch() элементи додашударо наёбад, чӣ мешавад?

Биёед бори дигар ба ҳуҷҷатҳои расмии усули Arrays.binarySearch() назар андозем :
  • Усул индекси калидро дар натиҷаи ҷустуҷӯ пайдо мекунад, агар он дар массив дар доираи муайяншуда мавҷуд бошад; дар акси ҳол мо (-(нуқтаи воридкунӣ) - 1) мегирем .
  • Нуқтаи воридкунӣ ҳамчун нуқтае муайян карда мешавад, ки дар он калид ба массив ворид карда мешавад: индекси элементи аввал дар диапазон аз калид калонтар аст ё toIndex (index end) агар ҳамаи элементҳои диапазон аз калиди муайяншуда.
  • Дар хотир доред, ки арзиши бозгашт танҳо аз 0 калонтар ё баробар аст, вақте ки калид пайдо мешавад.
На он қадар равшан, дуруст? Дар сатри аввал гуфта мешавад, ки усул индекси калидро аз ҷустуҷӯ бармегардонад, агар он дар массив пайдо шавад. Агар он ёфт нашавад, натиҷа ба қимат баробар мешавад (-(нуқтаи воридкунӣ) - 1) . Вобаста аз калиди ҷустуҷӯ, нуқтаи воридкунӣ метавонад маъноҳои гуногун дошта бошад. Фарз мекунем, ки мо массиви [5, 6, 7, 8, 9, 10] ва калиди ҷустуҷӯии 0 дорем , ки он бешубҳа дар массив нест. Дар ин ҳолат калиди ҷустуҷӯ аз ҳамаи элементҳои массив камтар аст. Аммо унсури аввалине, ки аз калиди ҷустуҷӯ бузургтар аст, 5 аст . Ҳамин тариқ, дар ҳолати мо нуқтаи воридкунӣ чунин хоҳад буд:
(-(индекси элементи якум аз калиди ҷустуҷӯ калонтар) - 1) = (0 - 1) = -1
Шумо метавонед инро дар як пораи code ба таври зерин амалӣ кунед:
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 аст . Шумо метавонед инро дар як пораи code ба таври зерин амалӣ кунед:
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