Java数组操作最高效的方式是循环取值,如果转换成集合那么就会分配内存,效率不如前者,但是方法多,需要在性能调优上去权衡。切记:数组是数组,集合是集合。

下面是收集最常用的数组转成集合的操作方法:

  1. import org.apache.commons.lang3.ArrayUtils;
  2. import java.util.Arrays;
  3. import java.util.HashSet;
  4. import java.util.Set;
  5.  
  6. //检查数组是否包含某个值的方法
  7. public class TestArray {
  8. // 使用List
  9. public static boolean useList(String[] arr, String targetValue) {
  10. return Arrays.asList(arr).contains(targetValue);
  11. }
  12.  
  13. // 使用Set
  14. public static boolean useSet(String[] arr, String targetValue) {
  15. Set<String> set = new HashSet<String>(Arrays.asList(arr));
  16. return set.contains(targetValue);
  17. }
  18.  
  19. // 使用循环判断
  20. public static boolean useLoop(String[] arr, String targetValue) {
  21. for (String s : arr) {
  22. if (s.equals(targetValue))
  23. return true;
  24. }
  25. return false;
  26. }
  27.  
  28. // 查找有序数组中是否包含某个值的用法
  29. public static boolean useArraysBinarySearch(String[] arr, String targetValue) {
  30. int a = Arrays.binarySearch(arr, targetValue);
  31. if (a > 0)
  32. return true;
  33. else
  34. return false;
  35. }
  36.  
  37. // 使用ArrayUtils
  38. public static boolean useArrayUtils(String[] arr, String targetValue) {
  39. return ArrayUtils.contains(arr, targetValue);
  40. }
  41.  
  42. public static void main(String[] args) {
  43. String[] arr = new String[] { "CD", "BC", "EF", "DE", "AB", "JK" };
  44. // use list
  45. long startTime = System.nanoTime();
  46. for (int i = 0; i < 100000; i++) {
  47. useList(arr, "A");
  48. }
  49. long endTime = System.nanoTime();
  50. long duration = endTime - startTime;
  51. System.out.println("useList:" + duration / 1000000);
  52. // use set
  53. long startTime2 = System.nanoTime();
  54. for (int i = 0; i < 100000; i++) {
  55. useSet(arr, "A");
  56. }
  57. long endTime2 = System.nanoTime();
  58. long duration2 = endTime2 - startTime2;
  59. System.out.println("useSet:" + duration / 1000000);
  60. // use loop
  61. long startTime3 = System.nanoTime();
  62. for (int i = 0; i < 100000; i++) {
  63. useLoop(arr, "A");
  64. }
  65. long endTime3 = System.nanoTime();
  66. long duration3 = endTime3 - startTime3;
  67. System.out.println("useLoop:" + duration / 1000000);
  68. // use Arrays.binarySearch()
  69. long startTime4 = System.nanoTime();
  70. for (int i = 0; i < 100000; i++) {
  71. useArraysBinarySearch(arr, "A");
  72. }
  73. long endTime4 = System.nanoTime();
  74. long duration4 = endTime4 - startTime4;
  75. System.out.println("useArraysBinarySearch:" + duration / 1000000);
  76. }
  77. }
  78. /*
  79. * 显然,使用一个简单的循环方法比使用任何集合都更加高效。许多开发人员为了方便,都使用第一种方法,但是他的效率也相对较低。
  80. * 因为将数组压入Collection类型中,首先要将数组元素遍历一遍,然后再使用集合类做其他操作。
  81. */

使用时要导入下面的包:

  1. <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
  2. <dependency>
  3. <groupId>org.apache.commons</groupId>
  4. <artifactId>commons-lang3</artifactId>
  5. <version>3.6</version>
  6. </dependency>

参考:

http://www.cnblogs.com/ipetergo/p/6429747.html(以上内容转自此篇文章)

http://www.importnew.com/18700.html

Java数组操作方法收集(快速判断某个值在这个数组中)的更多相关文章

  1. vuex中filter的使用 && 快速判断一个数是否在一个数组中

    vue中filter的使用 computed: mapState({ items: state => state.items.filter(function (value, index, arr ...

  2. PHP foreach遍历数组之如何判断当前值已经是数组的最后一个

    先给出foreach的两种语法格式 1,foreach (array_expression as $value) statement 2,foreach (array_expression as $k ...

  3. 判断一个值是否在数组里,可以检测数字,字符串,json对象

    Array.prototype.indexOf = function (val) {//判断数组是否存在某个值,如果存在返回该值对应的索引,否则返回-1 for (var i = 0; i < ...

  4. php判断一个值是否在一个数组中,区分大小写-也可以判断是否在键中

    function in_array_case($value,$array){ return in_array(strtolower($value),array_map('strtolower',$ar ...

  5. JavaScript 数组操作方法 和 ES5数组拓展

    JavaScript中数组有各种操作方法,以下通过举例来说明各种方法的使用: 数组操作方法 push 在数组最后添加一个元素 var arr=[3,4,5,6] console.log(arr) // ...

  6. php在数组中判断某个值是否存在

    php在数组中查找指定值是否存在的方法有很多,记得很久以前我一直都是傻傻的用foreach循环来查找的,下面我主要分享一下用php内置的三个数组函数来查找指定值是否存在于数组中,这三个数组分别是 in ...

  7. java 数组操作方法

    数组操作方法: 实现数组拷贝: 语法:System.arraycopy(源数组名称,源数组拷贝开始索引,目标数组名称,目标数组拷贝数组索引,长度) 数组A:1 . 2 . 3 . 4 . 5 . 6  ...

  8. php判断检测一个数组里有没有重复的值

    php判断检测一个数组里有没有重复的值 php里有一个处理数组重复值得函数array_unique,我们的思路就是用这个函数来实现的. if (count($array) != count(array ...

  9. 用于快速排查Java的CPU性能问题(top us值过高)

    转载于GIT路径 https://github.com/oldratlee/useful-scripts/blob/master/docs/java.md#beer-show-busy-java-th ...

随机推荐

  1. hdu 5402 Travelling Salesman Problem (技巧,未写完)

    题意:给一个n*m的矩阵,每个格子中有一个数字,每个格子仅可以走一次,问从(1,1)走到(n,m) 的路径点权之和. 思路: 想了挺久,就是有个问题不能短时间证明,所以不敢下手. 显然只要n和m其中一 ...

  2. SPICE-HTML5 鼠标指针BUG修复

    研究SPICE,找到了他们官方指定的HTML5客户端.下载下来用一下,发现跟网页VNC的水平差不多了.http://www.spice-space.org/page/Html5 服务端直接用QEMU起 ...

  3. 如何处理Docker的错误消息request canceled:Docker代理问题

    在本地安装Kubernetes时,遇到错误消息: request canceled while waiting for connection(Client.Timeout exceeded while ...

  4. MongoDB最简单的入门教程之一 环境搭建

    MongoDB是近年来非常流行的一个介于关系数据库和非关系数据库之间的解决方案,特别广泛地应用于国内很多互联网公司,是非关系数据库当中功能最丰富,最像关系数据库的. MongoDB支持的数据结构非常松 ...

  5. 世平信息(W 笔试)

    选择题 大题 1.启动Thread的方法有几种 算法题 1.写出冒泡排序算法

  6. Vue之过滤器的使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. composer 设置代理

    在命令行终端中输入以下内容: export https_proxy='192.168.1.133:1080' export http_proxy='192.168.1.133:1080' 此前提是你已 ...

  8. mysql 5.7 windows zip安装

    mysql 官网下载windows zip 安装包 并解压 (D:wampmysql-56-winx64) 添加path D:wampmysql-5722-winx64bin 创建data目录 D:\ ...

  9. rspec测试(使用guard自动测试和spork加速测试)配置

    Gemfile文件添加rspec.guard和spork,之后执行bundle install命令 gem 'rb-readline' group :development, :test do # C ...

  10. Java:追加文件内容

    文章来源:https://www.cnblogs.com/hello-tl/p/9139367.html import java.io.*; public class FileBasicOperati ...