首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在java中对带key和value的未排序数组使用二进制查找?

在Java中,可以使用二进制查找算法来在带有key和value的未排序数组中查找指定的key。下面是一个实现该功能的示例代码:

代码语言:txt
复制
import java.util.Arrays;

public class BinarySearchExample {
    public static void main(String[] args) {
        // 定义一个带有key和value的未排序数组
        int[][] array = {{5, 10}, {2, 20}, {10, 30}, {7, 40}, {3, 50}};

        // 对数组按照key进行排序
        Arrays.sort(array, (a, b) -> Integer.compare(a[0], b[0]));

        // 要查找的key
        int targetKey = 7;

        // 使用二进制查找算法查找指定的key
        int index = binarySearch(array, targetKey);

        // 输出查找结果
        if (index != -1) {
            System.out.println("找到了,value为:" + array[index][1]);
        } else {
            System.out.println("未找到指定的key");
        }
    }

    private static int binarySearch(int[][] array, int targetKey) {
        int left = 0;
        int right = array.length - 1;

        while (left <= right) {
            int mid = left + (right - left) / 2;

            if (array[mid][0] == targetKey) {
                return mid;
            } else if (array[mid][0] < targetKey) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }

        return -1;
    }
}

上述代码中,首先定义了一个带有key和value的未排序数组。然后使用Arrays.sort()方法对数组按照key进行排序。接下来,定义了一个binarySearch()方法,使用二进制查找算法在排序后的数组中查找指定的key。最后,在main()方法中调用binarySearch()方法进行查找,并输出查找结果。

这个问题中没有要求提及腾讯云相关产品和产品介绍链接地址,因此不需要提供相关信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java常见的8种数据结构「建议收藏」

大家好,又见面了,我是你们的朋友全栈君。 数据结构是指数据在计算机内存空间中或磁盘中的组织形式 算法是完成特定任务的过程 数据类型是指一组值和一组对这些值得操作的集合。...数组 顺序存储相同类型的多个数据 二分法查找 r=2^s s:查找步数 r查找范围 幂函数 s=log2® 已知范围获取需要的次数 对数 算法复杂度使用O(N)函数进行标示 主要是去除常数 看运行时间受数据项个数的影响...队头只允许删除操作(出队),队尾只允许插入操作(入队)实现方式数组或者链表 优先级对列 按照关键字值进行排序 插入到对应的位置;eg:在线程对列中 优先级高的优先处理 链表 链表是一种递归的数据结构,它或者为空...,对输入值做换算(切碎),最终给出固定长度的二进制输出值; 哈希表(Hash Table),也叫散列表,是一种可以通过关键码值(key-value)直接访问的数据结构,它最大的特点就是可以快速实现查找、...数组的最大特点就是查找容易,插入和删除困难;而链表正好相反,查找困难,而插入和删除容易。哈希表很完美地结合了两者的优点, Java 的 HashMap 在此基础上还加入了树的优点。

79430

ACM算法基础

ThreeSumBinarySearch 通过将数组先排序,对两个元素求和,并用二分查找方法查找是否存在该和的相反数,如果存在,就说明存在三元组的和为 0。...Java 的排序算法实现 Java 主要排序方法为 java.util.Arrays.sort(),对于原始数据类型使用三向切分的快速排序,对于引用类型使用归并排序。...二分查找实现有序符号表 使用一对平行数组,一个存储键一个存储值。 二分查找的 rank() 方法至关重要,当键在表中时,它能够知道该键的位置;当键不在表中时,它也能知道在何处插入新键。...1. get() 如果树是空的,则查找未命中; 如果被查找的键和根节点的键相等,查找命中; 否则递归地在子树中查找:如果被查找的键较小就在左子树中查找,较大就在右子树中查找。...Java 中的 hashCode() 实现了哈希函数,但是默认使用对象的内存地址值。在使用 hashCode() 时,应当结合除留余数法来使用。

1.9K30
  • 作为程序员,难道你心里没点“B树”?

    顺序存储 顺序存储的特点是各个存储单位在逻辑和物理内存上都是相邻的,典型的就是代表就是数组,物理地址相邻因此我们可以通过下标很快的检索出一个元素 我们想往数组中添加一个元素最快的方式就是往它的尾部添加....java&中序化二叉树; 思路: 按照原来中序遍历树的思路,对树进行中序遍历,一路递归到4这个节点, 检查到它的左节点为空,就将他的左节点指向它的前驱节点, 可是4本来就是最前的节点,故4这个节点的左节点自然指向了...[1,3,5,7,9,11,12] 我们可以通过二分法快速的查找到想要的元素,但是对它依然是数组,如果想往第一个位置上插入元素还是需要把从第一个位置开始的元素,依次往后挪....return root.searchParent(value); } } 缺点 二叉排序树其实对节点权是有要求的, 比如我们的数组就是[1,2,3,4] 那么画成平衡二叉树的话长下面这样 ?...,每个树的左子树和右子树的高度之差不超过1, 如果不满足这种情况了,马上马对各个节点进行调整,这样做保证了二叉排序树的优势 如何调整 情况1: 对于node1来说, 它的左边深度0 , 右边的深度2 ,

    39930

    27 个问题,告诉你Python为什么这么设计

    字典是如何在CPython中实现的? 为什么字典key必须是不可变的? 为什么 list.sort() 没有返回排序列表? 如何在Python中指定和实施接口规范? 为什么没有goto?...这意味着就浮点运算而言,Python 的行为类似于许多流行的语言,包括 C 和 Java。 许多可以轻松地用十进制表示的数字不能用二进制浮点表示。...为了提醒您这一事实,它不会返回已排序的列表。这样,当您需要排序的副本,但也需要保留未排序的版本时,就不会意外地覆盖列表。 如果要返回新列表,请使用内置 sorted() 函数。...此函数从提供的可迭代列表中创建新列表,对其进行排序并返回。例如,下面是如何迭代遍历字典并按keys排序: for key in sorted(mydict): ......# do whatever with mydict[key]... 如何在Python中指定和实施接口规范? 由C++和Java等语言提供的模块接口规范描述了模块的方法和函数的原型。

    6.7K11

    数据结构和算法(五)

    数组存储方式的分析: 优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。...顺序存储二叉树 基本说明 从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组....赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 重要概念,举例说明 路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。..., 该新的二叉树的根节点的权值是前面两颗二叉树根节点权值的和 再将这颗新的二叉树,以根节点的权值大小 再次排序, 不断重复 1-2-3-4 的步骤,直到数列中,所有的数据都被处理,就得到一颗赫夫曼树...生成赫夫曼树对应的赫夫曼编码 使用赫夫曼编码来生成赫夫曼编码数据 (已压缩) 转成赫夫曼编码对应的字符串 “101010…” =>对照赫夫曼编码重新转成原来的字符串 代码实现(解压功能有bug :数组下标越界和空指针异常

    69220

    【数据结构】认识赫夫曼树与赫夫曼编码 上手实现压缩文件和解压

    赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近 赫夫曼树几个重要概念和举例说明 路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。...通路 中分支的数目称为路径长度。若规定根结点的层数为 1,则从根结点到第 L 层结点的路径长度为 L-1 结点的权及带权路径长度:若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。...结 点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积 树的带权路径长度:树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为 WPL(weighted path length...其实这就是我们之前压缩思路的逆向, * 2.我们先需要将 byte数组形式的转成二进制的心态, * 3....其实这就是我们之前压缩思路的逆向, * 2.我们先需要将 byte数组形式的转成二进制的心态, * 3.

    49230

    【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】

    相关知识 为了完成本关任务,你需要掌握: 相关排序和查找算法的原理 C++ 类与成员函数的定义 数组作为类的成员变量的处理 1....; // 数组的大小 public: Array(int arr[], int n); // 构造函数声明,用于初始化数组对象 // 在这里声明要封装的排序和查找成员函数,如...例如: 成员函数的定义与调用: 要掌握如何在类的实现文件中正确地定义这些成员函数,并且在函数内部能够正确地访问类的私有成员变量(如通过 this 指针来访问当前对象的 data 和 size...: 在成员函数中,要通过正确的方式使用类中的数组成员变量来实现排序和查找逻辑,比如使用 this->data[i] 的形式来访问数组中第 i 个元素,确保操作的是当前对象所关联的数组内容。...返回值处理: 排序成员函数通常不需要返回值(因为它们直接对类中的数组进行原地排序操作),而顺序查找成员函数需要返回查找目标元素在数组中的索引,如果没找到则返回合适的值(如 -1)来表示查找失败

    6500

    2019秋招:460道Java后端面试高频题答案版【模块二:Java集合类】

    当我们想往一个 HashMap 中添加一对 key-value 时,系统首先会计算 key 的 hash 值,然后根据 hash 值确认在 table 中存储的位置。若该位置没有元素,则直接插入。...通过 key 的 hash 值找到在 table 数组中的索引处的 Entry,然后返回该 key 对应的 value 即可。...在存储的过程中,系统根据 key 的 HashCode 来决定 Entry 在 table 数组中的存储位置,在取的过程中同样根据 key 的 HashCode 取出相对应的 Entry 对象(value...HashMap 的 key 和 value 都允许为 null,而 Hashtable 的 key 和 value 都不允许为 null。...此类不能被实例化, 服务于 Java 的 Collection 框架。它包含有关集合操作的静态多态方法,实现对各种集合的搜索、排序、线程安全等操作

    59230

    【Redis】Redis之上篇

    而Redis的数据结构类型是针对key的value来说的,例如,string是指的key的value是string;list是指key的value是一个list;hash是指key的filed和value...不同的是每个元素都会关联一个double类型的分数。Redis正是通过分数来为集合中的成员进行从小到大的排序。ZSet的成员是唯一的,但分数(Score)却可以重复。 3....Hash对象只有同时满足下面两个条件时,才会使用ziplist(压缩列表):1.哈希中元素数量小于512个;2.哈希中所有键值对的键和值字符串长度都小于64字节。...Redis中的字典使用hashtable作为底层实现的话,每个字典会带有两个哈希表,一个平时使用,另一个仅在rehash(重新散列)时使用。随着对哈希表的操作,键会逐渐增多或减少。...如果不对平衡树进行一定的改造,这里的中序遍历并不容易实现。而在skiplist上进行范围查找就非常简单,只需要在找到小值之后,对第1层链表进行若干步的遍历就可以实现。

    46320

    数组

    拓展知识点: 数组和链表迭代的方式不同 ArrayList实现了RandomAccess接口 这是一个标记接口,标注是否可以随机访问 ArrayList使用数组实现,可以随机访问 经过测试 使用for循环遍历...HashMap HashMap ,是一种散列表,用于存储 key-value 键值对的数据结构,每一个键值对也叫做Entry,一般翻译为“哈希表”,提供平均时间复杂度为 O(1) 的、基于 key...如果使用排序的映射,建议使用TreeMap。...Java对象), ② 然后再通过Hash算法的后两步运算(高位运算 (扰动函数) 和取模运算 (路由算法) )来定位该键值对的存储位置 Hash冲突 由来:不同的数据经过hash扰动函数hash( )、...,图(b)表示扩容后key1和key2两种key确定索引位置的示例,其中hash1是key1对应的哈希与高位运算结果。

    22020

    【JAVA-Day31】深入解析冒泡、选择和插入排序在数组排序中的应用

    深入解析冒泡、选择和插入排序在数组排序中的应用 博主 默语带您 Go to New World....选择排序是一个简单但不太高效的排序算法,让我们通过示例代码来演示其工作原理以及如何在Java中实现它。...然后,我们调用了selectionSort函数来对这个数组进行选择排序。选择排序的核心思想是不断找到未排序部分的最小元素,然后将其放在已排序部分的末尾。...插入排序是一个简单但高效的排序算法,让我们通过示例代码来演示其工作原理以及如何在Java中实现它。...在这种情况下,选择排序和冒泡排序性能可能太差,不适合使用。你可以考虑使用更高效的排序算法,如快速排序。

    13810

    Redis系列(一):Redis的五种基本数据类型操作命令操作实战应用场景

    ,降低对db源的请求压力,如使用redis作为缓存层,mysql做持久化层,降低mysql的读写压力。...计数器:如统计文章访问量、点赞等。 分布式锁:如在一个集群环境下,多个web应用时对同一个商品进行抢购和减库存操作时,可能出现超卖时,会用到分布式锁。...,数组➕链表,不同的是redis中set的key只能是字符串。...每个 value都被赋予一个 score,代表这个 value 的排序权重,使得集合中的元素能够按score进行有序排列。ZSet通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。...粉丝列表:score可以是关注时间,以关注时间进行排序 权重分配:可以用sorted set来做带权重的队列

    26610

    【Redis00】 入门

    ,如jpg图片或序列化对象 二进制安全 二进制安全是指在传输数据时,能够保证二进制数据的安全性,也就是保证二进制数据不被篡改,编译,如果被攻击,也能够及时检测出来 二进制安全的特点 编码解码发生在客户端...字符串的截取范围由 start 和 end 两个偏移量决定 GETBIT key offset: 对 key 所储存的字符串值,获取指定偏移量上的位(bit) MGET key1 [key2...]...,热点新闻等 任务队列 用户下单流程 Set(无序集合) 底层使用 intset 和hashtable 两种数据结构存储。...intset 内部是一个数组,而且存储数据时是由虚的,所以在查找数据时是通过二分查找来实现的。...(第一名是0)(低到高排序) ZREMRANGEBYSCORE key min max 移除有序集合中给定的分数区间的所有成员 应用场景 排行榜,带权队列,存储成绩 其他功能 订阅发布 事务 数据淘汰策略

    38420

    重读算法导论之算法基础

    原理: 整个过程中将数组中的元素分为两部分,已排序部分A和未排序部分B 插入过程中,从未排序部分B取一个值插入已排序的部分A 插入的过程采用的方式为: 依次从A中下标最大的元素开始和B中取出的元素进行对比...其java实现代码如下: private static void bubbleSort(int[] arr) { // i可以看做是未排序数组的最左端元素下标,每次循环最左端冒泡出最小的元素...,只不过选择排序是每次遍历未排序部分选择最小元素,冒泡排序时对未排序部分依次两两对比。...归并排序中对小数组使用插入排序优化 ​ 虽然归并排序的最坏情况运行时间为Θ(nlgn),而插入排序的最坏情况运行时间为Θ(n2),但是插入排序中的常量因子可能使得它在n较小时,在许多机器上实际运行得更快...考虑对归并排序的一种修改,其中使用插入排序来排序长度为k的n/k个子表,然后使用标准的合并机制来合并这些子表,这里k是一个待定的值。

    933100

    不能更详细的Java 集合!

    (); } Java queue常常使用的方法如表格所示,对于表格中接口和表格中没有的接口方法区别为:队列的操作不会因为队列为空抛出异常,而集合的操作是队列为空抛出异常。...0:tail+1,是不是很神奇的写法,其原理是一个二进制数全部由1组成和一个大于它的数做&运算结果为0,如10000&1111 = 0。...Map Map是一种键值对的结构,就是常说的Key-Value结构,一个Map就是很多这样K-V键值对组成的,一个K-V结构我们将其称作Entry,在Java里,Map是用的非常多的一种数据结构。...} } Map接口本身就是一个顶层接口,由一堆Map自身接口方法和一个Entry接口组成,Entry接口定义了主要是关于Key-Value自身的一些操作,Map接口定义的是一些属性和关于属性查找修改的一些接口方法...5.2 HashMap HashMap是Java中最常用K-V容器,采用了哈希的方式进行实现,HashMap中存储的是一个又一个Key-Value的键值对,我们将其称作Entry,HashMap对Entry

    33220

    《offer来了》第四章学习笔记

    3.3.循环链表 表中最后一个节点的指针域指向头节点,整个链表形成一个环。 ? 4.哈希表 根据数据的关键码值(Key-Value 对)对数据进行存取的数据结构。 ?...4.1.计算散列算法 ◎ 直接定址法:取关键字或关键字的某个线性函数值为散列地址,即 h(key)= key 或h(key)=a×key+b,其中 a 和 b 为常数。...◎ Java HashCode 实现:在 Java 中计算 HashCode 的公式为 f(key) = s[0] × 31n-1+s[1] × 31n-2 +…+s[n-1]。具体实现如下: ?...带权值的网图连接表结构 对于带权值的图,在节点定义中再增加一个权重值 weight 的数据域,存储权值信息即可 ?...8.位图 基于数组实现,将数组中的每个元素都看作一系列二进制数,所有元素一起组成更大的二进制集合,这样就可以大大节省空间。

    96840

    Redis01-Redis的数据结构之简单动态字符串SDS

    Redis的简介 Redis是一个开源的高性能的key-value数据库,与其他的key-value缓存产品相比有以下三个特点: 1.Redis支持数据的持久化,可以将内存中的数据持久化到硬盘中,主要有...简单动态字符串(SDS) Redis没有直接使用C语言传统的字符串(以空字符串结尾的字符数组,在Redis中C字符串只会作为字符串字面量,用在一些无需对字符串进行修改的地方,如打印日志),而是自己构建了一种名为简单动态字符串...其数据结构的定义如下: struct sdshdr{ //记录buf数组中未使用字节的数量,如上图free为0代表未使用字节的数量为0 int free; //记录buf...为了避免C字符串的这种缺陷,SDS通过未使用空间解除了字符串长度和底层数组长度之间的关联:在SDS中,buf数组的长度不一定就是字符串数量加一,数组里面可以包含未使用的字节,而这些字节的数量就是由SDS...通过未使用空间,SDS实现了空间预分配和惰性空间释放两种优化策略。 1. 空间预分配 数组在进行扩容的时候,往往会申请一个更大的数组,然后把数组复制过去。

    36930

    Redis的常用数据结构和底层实现方式

    alloc:字符串的最大容量 flags:标识为,第三位表示类型,其余5位未使用 buf:字符数组 encoding可能是int,raw,embstr int:可以用long类型整数表示,redis会将键值转...,支持反向查找和遍历微博的关注列表、粉丝列表、消息列表等 常用命令 LPUSHX key value #将一个值插入到已存在的列表头部 LPUSH key value1 [value2] #将一个或多个值插入到列表头部...zset 有序集合,带权重的集合,可以根据权重进行排序或查找和set相⽐,sorted set增加了⼀个权重参数score,使得集合中的元素能够按score进⾏有序排列。...#有序集合中对指定成员的分数加上增量 increment 底层实现 encoding使用ziplist或者skiplist ziplist 连续存放值以及score(排序的标准,double)当元素个数以及长度都比较小时使用...skiplist 跳表(具有层次结构的链表),可支持范围查询 查找和插入的时间复杂度都是log(n) 使用一个dict保存每个值对应的score 查找时,从开始查找,知道找到大于或者null的然后指向节点的下一层

    49920

    Redis五大基本数据类型(String、LIst、Set、Hash、ZSet)及其底层结构

    getrange key> 获得值的范围,类似java中的substring,前包,后包 setrange key>value>用 value> 覆写key...Java中HashSet的内部实现使用的是HashMap,只不过所有的value都指向同一个对象。Redis的set结构也是一样,它的内部也使用hash结构,所有的value都指向同一个内部值。...> [WITHSCORES] 返回有序集 key 中,下标在之间的元素,带WITHSCORES,可以让分数一起和值返回到结果集。...zset底层使用了两个数据结构: hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。...跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。 关于跳跃表 有序集合在生活中比较常见,例如根据成绩对学生排名,根据得分对玩家排名等。

    1.1K21
    领券