首页
学习
活动
专区
圈层
工具
发布

在Java中如何高效判断数组中是否包含某个元素

原文作者:Hollis_Chuang 原文地址:http://www.hollischuang.com/archives/1269 如何检查一个数组(无序)是否包含一个特定的值?...这是一个在Java中经常用到的并且非常有用的操作。同时,这个问题在Stack Overflow中也是一个非常热门的问题。...在投票比较高的几个答案中给出了几种不同的方法,但是他们的时间复杂度也是各不相同的。本文将分析几种常见用法及其时间成本。...基本思想就是从数组中查找某个值,数组的大小分别是5、1k、10k。这种方法得到的结果可能并不精确,但是是最简单清晰的方式。...因为将数组压入Collection类型中,首先要将数组元素遍历一遍,然后再使用集合类做其他操作。 如果使用Arrays.binarySearch()方法,数组必须是已排序的。

9.5K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    silverlight中如何将BitmapImage转化为Stream或byte数组?

    上一篇"base64编码在silverlight中的使用"里已经提到WriteableBitmap对象可以借助FluxJpeg转化为base64字符串,而WriteableBitmap又能从BitmapSource...问题解决了 先将BitmapImage转化为WriteableBitmap,然后得到base64字符串,然后可以得到base64的byte[]数组,再然后您可以把byte[]变成Stream 关键代码:...WriteableBitmap wb = new WriteableBitmap(img.Source as BitmapSource);//将Image对象转换为WriteableBitmap byte...[] b = Convert.FromBase64String(GetBase64Image(wb));//得到byte数组 将byte[]还原为图片: 1 byte[] b = ......//这里的b为上面生成的base64编码的byte数组 2 MemoryStream ms = new MemoryStream(b); 3 BitmapImage bitImage = new BitmapImage

    1.7K50

    java中byte数组与十六进制字符串相互转换

    Integer.toHexString((data[i] & 0xFF) | 0x100).toUpperCase().substring(1, 3); } return result; } 我们看看java...的byte[]数组的原理: Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示。...同理,相反的转换也是将两个16进制字符转换成一个byte,原理同上。 根据以上原理,我们就可以将byte[] 数组转换为16进制字符串了,当然也可以将16进制字符串转换为byte[]数组了。...* @author Herman.Xiong * @date 2014年5月5日 17:08:46 * @param ch 十六进制char * @param index 十六进制字符在字符数组中的位置...Character.digit(ch, 16); if (digit == -1) { throw new RuntimeException("非法16进制字符 " + ch + " 在索引

    7.5K30

    Java的字节(byte)数组与Python3中的字节类型负值问题

    在Java中,字节数组可以存放负值,这是因为Java的byte类型的取值范围为-128到127之间,而在Python3中,bytes的取值范围为0到256。...Java: -127~128 Python:0~256 在某些场景下,比如AES加密时,会用到Key、IV(偏移量)等参数值的定义,在Java中有可能是如下的: public static byte[...来实现同样的加密算法则会出现一个问题,就是上面Java代码中的负值无法在Python3中直接表示。...面对这种情况,在Python3中可用如下方法进行转换: iv = [1, 3, 8, 22, -13, 125, -40, -124, -27, -10, 57, 13, 46, 22, -3, 5]...iv_byte = bytes(i % 256 for i in iv) 之后在传入Python中对应的AES算法函数当中,相应的加密结果便一致了。

    2.2K20

    踩坑:在Java中使用 byte 数组作为 Map 的 key

    本文将引领我们探索:如何将byte数组作为HashMap中键。HashMap的机制使我们无法直接这样做。让我们研究一下,为何出现此状况,以及针对这种情况,几种可供选择的解决方案。...如果对象是不可变的,无论hashCode方法的实现如何,它的哈希值都不会被更改。 在默认情况下,哈希值是基于对象的所有字段进行计算的。...使用 byte 数组作为key 为了能够从映射中成功地检索值,相等性必须是有意义的。这就是使用byte数组并不是一个真正的选择的主要原因。在Java中,数组使用对象标识来确定相等性。...总结 本文将讨论在使用HashMap时,当byte数组作为key时所遇到的问题及其解决方案。 首先,我们将研究为什么不能直接使用数组作为键。...这是因为数组的hashCode值是基于其在内存中的地址计算得出的,因此即使两个数组内容完全相同,它们在内存中的位置不同,它们的hashCode也会不同。

    2.2K20

    在Java中,如何实现封装?

    在 Java 中实现封装主要通过 访问修饰符 和 getter/setter 方法 来实现,核心步骤是"隐藏属性、暴露接口"。...具体实现方式如下:一、使用访问修饰符隐藏类的成员Java 提供了 4 种访问修饰符,用于控制类成员(属性和方法)的访问范围,从而实现隐藏:修饰符 访问范围...二、通过 getter/setter 方法暴露访问接口对于私有属性,提供公共的 getXxx() 方法(获取属性值)和 setXxx() 方法(设置属性值),在方法中可以添加校验逻辑,确保数据合法性。...public int getAge() { return age; } public void setAge(int age) { // 例如:限制年龄在...总结Java 实现封装的核心步骤: 用 private 修饰属性,禁止外部直接访问; 提供 public 的 getter/setter 方法,控制属性的读写逻辑; 用访问修饰符隐藏内部方法实现,

    47310

    在 Java 中如何使用 transient

    A:当对象被序列化时(写入字节序列到目标文件)时,transient阻止实例中那些用此关键字声明的变量持久化;当对象被反序列化时(从源文件读取字节序列进行重构),这样的实例变量值不会被持久化和恢复。...例如,当反序列化对象——数据流(例如,文件)可能不存在时,原因是你的对象中存在类型为java.io.InputStream的变量,序列化时这些变量引用的输入流无法被打开。...transient使用介绍 Q:如何使用transient? A:包含实例变量声明中的transient修饰符。片段1提供了小的演示。 ? ? ?...类中的成员变量和transient Q:类中的成员变量中可以使用transient吗? A:问题答案请看片段2 ? 片段2:序列化和反序列化Foo对象 片段2有点类似片段1。...由于JavaWorld中的“The Java serialization algorithm revealed”这篇文章,我们发现输出的含义: AC ED 序列化协议标识 00 05 流版本号 73 表示这是一个新对象

    10.9K20

    java如何向数组中添加元素

    今天说一说java如何向数组中添加元素[数组的添加],希望能够帮助大家进步!!! java篇 哇,菜鸟第一次写这个东西,当加深印象,大佬们请略过,欢迎有错指出。...向数组里添加一个元素怎么添加,这儿总结有三种方法: 1、一般数组是不能添加元素的,因为他们在初始化时就已定好长度了,不能改变长度。...list.add(1); list.add(2); list.add(3); list.add(2,4); System.out.println(list); 只听到从架构师办公室传来架构君的声音...但这儿会有一个陷阱盲区,在把array转化为list的过程中,使用的asList()方法会返回一个final的,固定长度的ArrayList类,并不是java.util.ArrayList,直接这样利用它进行...(5); 那应该怎么做呢,在定义list的时候就直接对array进行转化,代码如下: (注意这儿Array类型是包装类,若是一般数据类型记得转化,转化参考我其他博客文章。)

    12.3K20

    Java中的数组

    1.2 数组的定义 所谓数组可以看成是相同类型元素的一个集合,他在内存中是一段连续的空间。...数组的空间是连接在一起的 每个空间都有自己编号,起始位置的编号为0,我们称编号为数组的下标 2.数组的创建与初始化 2.1 数组的创建 数组的创建格式为:T[ ] 数组名 = new T[N] T为数组中存放元素的基本类型...这里简单介绍一下数组的基本类型 数组支持八大基本类型,并且当数组没有被初始化时,其默认值为基本类型对应的默认值。例如,当数组为String引用类型时,在没有被初始化的情况下,其默认值为null。...在java的开发工具中,通过数组名.length可以直接获取到数组的长度。...总结:所谓的 “引用” 本质上只是存了⼀个地址,Java 将数组设定成引用类型, 这样的话后续进行数组参数传参, 其实只是将数组的地址传入到了函数形参中。

    33710

    JAVA中的数组

    当然我们也可以采用像在c语言中定义数组的方式,不过在java中并不常用,在此不再介绍。...2 静态初始化 方法:数据类型[] 数组名 = {数据元素} 例如: int[] arr = {1,2,3,4...} 注:如果数组在一开始就确定了大小,那么这时候建议使用静态初始化。...我们可以设置一个数组 int[] arr = new int[100]; int[] arr1 = arr; 此时arr中的元素全都是0,实际上arr1与arr指向的是痛一个数组,如果修改arr[0]...那么应该如何做到真正的复制一个数组呢? 这时候就需要用到Arrays类中的copyOf方法,利用这个方法,就可以将数组进行复制。...数组是会给存储到数组中 的元素分配一个索引值的,索引值从0开始,最大的索引值是length-1; 数组一旦初始化,长度固定。 数组中的元素与元素之间的内存地址是连续的。

    3K20
    领券