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中如何高效的判断数组中是否包含某个元素---的更多相关文章

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

    原文出处: hollischuang(@Hollis_Chuang) 如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Ove ...

  2. 在Java中怎样高效的推断数组中是否包括某个元素

    来自 http://www.hollischuang.com/archives/1269? 怎样检查一个数组(无序)是否包括一个特定的值?这是一个在Java中经经常使用到的并且非常实用的操作.同一时候 ...

  3. Jquery判断数组中是否包含某个元素$.inArray()的用法

    判断数组里面是否包含某个元素可以使用 $.inArray("元素(字符串)",数组名称) 进行判断 ,当存在该元素(字符串)时,返回该元素在数组的下标,不存在时返回 -1 示例代码 ...

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

    如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Overflow中也是一个非常热门的问题.在投票比较高的几个答案中给出了几种 ...

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

    如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Overflow中也是一个非常热门的问题.在投票比较高的几个答案中给出了几种 ...

  6. 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...

  7. JS判断数组中是否有重复元素的方法

    判断数组中是否有重复元素,最容易想到的方法是使用2重循环,逐个遍历,比较,但是这个是最慢,最笨的方法,百度得出了更好的方法. var ary = new Array("111",& ...

  8. js 判断数组中是否存在

    /* 判断数组中是否存在 var somearray = ["mon", "tue", "wed", "thur"] s ...

  9. 面试题:给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字

    题目:给定一个长度为N的数组,其中每个元素的取值范围都是1到N.判断数组中是否有重复的数字.(原数组不必保留) 方法1.对数组进行排序(快速,堆),然后比较相邻的元素是否相同.时间复杂度为O(nlog ...

随机推荐

  1. pandas 运算

    Data frame 和 series 的运算:横列相加减:按照index ,row 的方向直接相加减.frame-series纵列相加减:按照 columns,运用算术函数,相加减. frame.s ...

  2. Oracle Procedure记录

    1.定义 所谓存储过程(Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过 编译后存储在数据库系统中.在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储 ...

  3. tomcat安装图文教程

    tomcat安装图文教程 运维 memory 发布于June 1, 2013 标签: Windows, Tomcat 下载Tomcat安装文件,官方下载地址是:http://tomcat.apache ...

  4. linux-shutdown命令说明

    showdown命令: -k  不是真正关闭电脑,只是警告. -h 关闭后暂停 -r 关闭后重新引导 -c 取消已经运行的关闭操作 -n 不通过init直接关闭 -f 快速重新引导 time 关闭的时 ...

  5. LeetCode OJ:Swap Nodes in Pairs(成对交换节点)

    Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...

  6. 说说C++多重继承

    尽管大多数应用程序都使用单个基类的公用继承,但有些时候单继承是不够用的,因为可能无法为问题域建模或对模型带来不必要的复杂性.在这种情况下,多重继承可以更直接地为应用程序建模. 一.基本概念 多重继承是 ...

  7. linux basename学习

    basename 用法 basename 名称 [后缀]   例子 1. $: basename /tmp/test.sh 输出: test.sh 2. $: basename /tmp/test.s ...

  8. Java语言基础-运算符

    一丶逻辑运算符 1.&和&&的区别 (1).两个逻辑运算符的结果是一样的 (2).当第一个表达式为false时,&是会判断后边的表达式,而&&会产生短路 ...

  9. AS3帮助手册

    http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/index.html

  10. Ubuntu 中sendmail 的安装、配置与发送邮件的具体实现

    一.安装 ubuntu中sendmail函数可以很方便的发送邮件,ubuntu sendmail先要安装两个包. 必需安装的两个包: 代码  sudo apt-get install sendmail ...