二分查找String[]是否有存在的key值

本文介绍了一个使用二分查找算法在已排序数组中查找特定元素的方法。该方法首先对数组进行排序,然后使用Arrays.binarySearch()函数来确定目标字符串是否存在。如果返回值大于等于0,则说明找到了目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public static boolean findIsExist(String key,String[] samList){
if (samList == null || samList.length==0){
return false;
}
//首先对数组排序
Arrays.sort(samList); 
//通过二分查找方法在数组中搜索是否含有5
int result = Arrays.binarySearch(samList, key); 
return result<0? false :true; 
}


### ABAP 中实现二分查找算法并处理汉字 在 ABAP 编程环境中,可以通过自定义逻辑来实现二分查找算法。对于涉及汉字的数据操作,需要注意字符编码以及字符串比较的方式。以下是基于给定引用和专业知识构建的一个完整的解决方案。 #### 1. 数据准备阶段 为了支持汉字的正确排序与比较,在创建内部表时应确保其字段类型为 `STRING` 或者其他适合存储多字节字符的类型。这一步骤能够保障后续的比较运算不会因字符集差异而失败[^3]。 ```abap DATA: lt_data TYPE TABLE OF string, ls_key TYPE string. " 填充测试数据 (假设这些是按升序排列的汉字) lt_data = VALUE #( ( CONV string( '一' ) ) ( CONV string( '三' ) ) ( CONV string( '五' ) ) ( CONV string( '七' ) ) ( CONV string( '九' ) ) ). ls_key = '五'. " 要查找的目标 ``` #### 2. 实现二分查找函数模块 下面展示了一个简单的递归版本的二分查找方法: ```abap FORM binary_search USING it_table TYPE REF TO data key_value TYPE any OPTIONAL RETURNING VALUE(rv_index) TYPE i. DATA(lt_lines) = lines_of( it_table ). IF lt_lines EQ 0. rv_index = -1. EXIT. ENDIF. FIELD-SYMBOLS: <fs_line> TYPE any. DATA(middle_pos) = trunc( lt_lines / 2 ) + 1. ASSIGN COMPONENT sy-tabix OF STRUCTURE it_table->* TO <fs_line>. CHECK assigned( <fs_line> ). IF cl_abap_compare=>equal( EXPORTING val1 = <fs_line> val2 = key_value ). rv_index = middle_pos. ELSEIF cl_abap_char_utilities=>is_initial_or_less_than( EXPORTING char1 = <fs_line> char2 = key_value ). DELETE it_table INDEX middle_pos. CALL FORM binary_search CHANGING it_table = it_table key_value = key_value RECEIVING result = rv_index. ELSE. DELETE it_table FROM middle_pos. CALL FORM binary_search CHANGING it_table = it_table key_value = key_value RECEIVING result = rv_index. ENDIF. ENDFORM. ``` 此代码片段实现了基本的二分查找功能,并通过 SAP 提供的标准类 `cl_abap_compare` 和工具类 `cl_abap_char_utilities` 来完成复杂的字符串对比工作,从而适应不同语言环境下的需求[^4]。 调用上述过程即可定位目标项的位置或者确认不存在的情况: ```abap DATA(result_position) = 0. CALL FORM binary_search CHANGING it_table = lt_data[] key_value = ls_key RECEIVING result = result_position. WRITE:/ 'Key found at position:', result_position. ``` --- ### 注意事项 - **性能考量**: 如果待查列表非常庞大,则需评估内存消耗情况;另外注意索引访问效率。 - **异常处理**: 上述例子未详尽考虑边界条件(如空集合),实际应用中应当补充相应防护措施。 - **国际化兼容性**: 使用统一的文字编码标准有助于跨平台移植性和一致性维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值