java中如何高效的判断数组中是否包含某个元素---
package zaLearnpackage;
import org.apache.commons.lang3.ArrayUtils;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
//检查数组是否包含某个值的方法
public
class
TestArray {
//使用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
;
}
//查找有序数组中是否包含某个值的用法
public
static
boolean useArraysBinarySearch(String[] arr,String targetValue){
int
a=Arrays.binarySearch(arr, targetValue);
if
(a>0)
return
true
;
else
return
false
;
}
//使用ArrayUtils
public
static
boolean useArrayUtils(String[] arr,String targetValue){
return
ArrayUtils.contains(arr,targetValue);
}
public
static
void
main(String[] args) {
String[] arr=
new
String[]{
"CD"
,
"BC"
,
"EF"
,
"DE"
,
"AB"
,
"JK"
};
//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
long
startTime2=System.nanoTime();
for
(
int
i=0;i<100000;i++){
useSet(arr,
"A"
);
}
long
endTime2=System.nanoTime();
long
duration2=endTime2-startTime2;
System.
out
.println(
"useSet:"
+duration/1000000);
//use loop
long
startTime3=System.nanoTime();
for
(
int
i=0;i<100000;i++){
useLoop(arr,
"A"
);
}
long
endTime3=System.nanoTime();
long
duration3=endTime3-startTime3;
System.
out
.println(
"useLoop:"
+duration/1000000);
//use Arrays.binarySearch()
long
startTime4=System.nanoTime();
for
(
int
i=0;i<100000;i++){
useArraysBinarySearch(arr,
"A"
);
}
long
endTime4=System.nanoTime();
long
duration4=endTime4-startTime4;
System.
out
.println(
"useArraysBinarySearch:"
+duration/1000000);
}
}
/*
* 显然,使用一个简单的循环方法比使用任何集合都更加高效。许多开发人员为了方便,都使用第一种方法,但是他的效率也相对较低。因为将数组压入Collection类型中,首先要将数组元素遍历一遍,然后再使用集合类做其他操作。
*/
java中如何高效的判断数组中是否包含某个元素---的更多相关文章
- 在Java中如何高效的判断数组中是否包含某个元素
原文出处: hollischuang(@Hollis_Chuang) 如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Ove ...
- 在Java中怎样高效的推断数组中是否包括某个元素
来自 http://www.hollischuang.com/archives/1269? 怎样检查一个数组(无序)是否包括一个特定的值?这是一个在Java中经经常使用到的并且非常实用的操作.同一时候 ...
- Jquery判断数组中是否包含某个元素$.inArray()的用法
判断数组里面是否包含某个元素可以使用 $.inArray("元素(字符串)",数组名称) 进行判断 ,当存在该元素(字符串)时,返回该元素在数组的下标,不存在时返回 -1 示例代码 ...
- 161101、在Java中如何高效判断数组中是否包含某个元素
如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Overflow中也是一个非常热门的问题.在投票比较高的几个答案中给出了几种 ...
- 在Java中如何高效判断数组中是否包含某个元素
如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Overflow中也是一个非常热门的问题.在投票比较高的几个答案中给出了几种 ...
- 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...
- JS判断数组中是否有重复元素的方法
判断数组中是否有重复元素,最容易想到的方法是使用2重循环,逐个遍历,比较,但是这个是最慢,最笨的方法,百度得出了更好的方法. var ary = new Array("111",& ...
- js 判断数组中是否存在
/* 判断数组中是否存在 var somearray = ["mon", "tue", "wed", "thur"] s ...
- 面试题:给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字
题目:给定一个长度为N的数组,其中每个元素的取值范围都是1到N.判断数组中是否有重复的数字.(原数组不必保留) 方法1.对数组进行排序(快速,堆),然后比较相邻的元素是否相同.时间复杂度为O(nlog ...
随机推荐
- linux ps 命令参数详解
-a 显示所有终端机下执行的进程,除了阶段作业领导者之外. a 显示现行终端机下的所有进程,包括其他用户的进程. -A 显示所有进程. -c 显示CLS和PRI栏位. c 列出进程时,显示每个进程真正 ...
- vue-cli Uncaught SyntaxError: Use of const in strict mode解决办法
vue-cli初始化项目,开发环境运行项目使用了webpack-dev-server,而最新版本webpack-dev-server@2.9.1运行项目时,并不能成功的把es6语法转化为es5,所以在 ...
- mysql 查看表信息
desc 表名; 查看表结构信息 show create table 表名; 查询建表详细信息 select COLUMN_NAME,COLUMN_TYPE,COLUMN_COMMENT from i ...
- ContentControl和ContentPresenter的应用
1:wpf中,所有的内容控件都继承自“ContentControl” ,所以我们可以直接应用“ContentControl”自定义我们“需要的”内容控件. 2:ContentControl具有Cont ...
- 设计模式--解释器模式C++实现
1定义 给定一门语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子 2类图 角色分析 AbstractExpression抽象解释器,具体的解释任务由各个实现类完成, ...
- pandas dataframe在指定的位置添加一列, 或者一次性添加几列,re
相信有很多人收这个问题的困扰,如果你想一次性在pandas.DataFrame里添加几列,或者在指定的位置添加一列,都会很苦恼找不到简便的方法:可以用到的函数有df.reindex, pd.conca ...
- ffmpeg nvenc编码
花时间研究了一些ffmpeg的nvenc,本来想我已经有了cuvid,然后又搞出来了nvenc,应该可以做个全套的英伟达的转码了,没想到ffmpeg官网下载的动态库没有cuvid,windows上编译 ...
- Less开发指南(二)- 基本语法
(一)嵌套规则 [1]less可以让我们以嵌套的方式编写层叠样式,先看下面这段CSS: .box-a .hd { height: 20px; } .box-a .bd .txt { color: #0 ...
- poj3308 Paratroopers 最大流 最小点权覆盖
题意:有一个n*m的矩阵,告诉了在每一行或者每一列安装大炮的代价,每一个大炮可以瞬间消灭这一行或者这一列的所有敌人,然后告诉了敌人可能出现的L个坐标位置,问如何安置大炮,使花费最小.如果一个敌人位于第 ...
- 【Python】高阶函数介绍
其实函数可以作为变量,之前学过C++,对于这种用法并不奇怪.无非就是函数充当变量,可以传入函数而已. 下面分别介绍 Python 中常见的高阶函数:map/reduce, filter, sorted ...