java中如何高效判断数组中是否包含某个特定的值
来源:互联网 发布:类似cherrytree的软件 编辑:程序博客网 时间:2024/06/08 09:06
四种不同方式检查数组是否包含某个值
使用List:
public static boolean useList(String[] arr, String targetValue) { return Arrays.asList(arr).contains(targetValue); }
使用Set:
public static boolean useSet(String[] arr, String targetValue) { Set<String> set = new HashSet<String>(Arrays.asList(arr)); return set.contains(targetValue); }
使用简单的循环语句:
public static boolean useLoop(String[] arr, String targetValue) { for (String s : arr) { if (s.equals(targetValue)) return true; } return false; }
使用Arrays.binarySearch()方法:
下面的代码是错误的,之所以列在下面是出于完整性考虑(四种判断方式),binarySearch()二分查找只能用于有序数组。
运行下面程序,你有可能会得到异常结果;
public static boolean useArraysBinarySearch(String[] arr, String targetValue) { int a = Arrays.binarySearch(arr, targetValue); if (a > 0) return true; else return false; }
四种实现方式对应的时间开销
数组大小为5:
public static void main(String[] args) {String[] arr = new String[] { "CD", "BC", "EF", "DE", "AB" };
// use list
long startTime = System.nanoTime();
for (int i = 0; i < 100000; i++) {
useList(arr, "A");
}
long endTime = System.nanoTime();
long duration = endTime - startTime;
System.out.println("useList: " + duration / 1000000);
// use set
startTime = System.nanoTime();
for (int i = 0; i < 100000; i++) {
useSet(arr, "A");
}
endTime = System.nanoTime();
duration = endTime - startTime;
System.out.println("useSet: " + duration / 1000000);
// use loop
startTime = System.nanoTime();
for (int i = 0; i < 100000; i++) {
useLoop(arr, "A");
}
endTime = System.nanoTime();
duration = endTime - startTime;
System.out.println("useLoop: " + duration / 1000000);
// use Arrays.binarySearch()
startTime = System.nanoTime();
for (int i = 0; i < 100000; i++) {
useArraysBinarySearch(arr, "A");
}
endTime = System.nanoTime();
duration = endTime - startTime;
System.out.println("useArrayBinary: " + duration / 1000000);
}
运行结果:
useList: 13
useSet: 72
useLoop: 5
useArraysBinarySearch: 9
数组大小为1000:
String[] arr = new String[1000]; Random s = new Random(); for (int i = 0; i < 1000; i++) { arr[i] = String.valueOf(s.nextInt()); }运行结果:useList: 112useSet: 2055useLoop: 99useArrayBinary: 12
结论:
从测试结果可以看出,使用简单的循环语句比使用任何集合都高效,很大一部分开发人员选择使用第一种方法(List),但这种方法其实是相对低效的。在使用集合提供的API前,需要把一个数组放到集合里,这需要消耗一定的时间,特别是对于Set集合;(注:其实ArrayList集合的性能跟普通的循环语句差不多,因为对于ArrayList,转换成集合的时候,仅仅是改变了内部的数组索引,遍历判断的时候,跟普通的循环语句类似);
如果要使用Arrays.binarySearch()方法,前提是数组要有序,在这个测试demo中,很显然数组是无序的,因此不该被使用;
事实上,如果你确实需要高效的去检查数组或集合中是否包含某个值,一个有序列表或者有序树能把时间复杂度降低到O(log(n)),或者使用散列集合,时间复杂度为O(1);
译文链接:http://www.programcreek.com/2014/04/check-if-array-contains-a-value-java/
连接风一样的码农:http://www.cnblogs.com/chenpi/category/783125.html
0 0
- java中如何高效判断数组中是否包含某个特定的值
- java高效 的判断数组中是否包含特定值
- 【Java】如何高效判断数组中是否包含某个元素?
- 在Java中如何高效的判断数组中是否包含某个元素
- 在Java中如何高效的判断数组中是否包含某个元素
- 在Java中如何高效的判断数组中是否包含某个元素
- 在Java中如何高效的判断数组中是否包含某个元素
- Java中如何高效的判断数组中是否包含某个元素
- 在Java中如何高效的判断数组中是否包含某个元素
- 在Java中如何高效的判断数组中是否包含某个元素
- 在Java中如何高效的判断数组中是否包含某个元素
- java中如何高效的判断数组中是否包含某个元素
- Java中高效判断数组中是否包含某个元素。
- 高效地判断数组中是否包含某特定值
- 在Java中如何高效判断数组中是否包含某个元素
- 在Java中如何高效判断数组中是否包含某个元素
- 在Java中如何高效判断数组中是否包含某个元素
- 在Java中如何高效判断数组中是否包含某个元素
- 数据结构实验之栈八:栈的基本操作
- 疯狂合并石子
- Maven仓库汇总
- Microsoft caffe cifar实例编译之model的生成
- RPG游戏(地图传送)
- java中如何高效判断数组中是否包含某个特定的值
- Java中Class类简介
- C++设计模式——单例模式
- Wakelock
- 欢迎使用CSDN-markdown编辑器
- 设计模式——观察者模式
- UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别
- Learn C Pointers
- OSG(美国海军NPS)教程学习加实践(2)