当前位置: 首页 > news >正文

关于数组或集合中判断存在某个元素

怎么判断一个数组或者集合中存在某个特定的元素:

转自:http://zhaoningbo.iteye.com/blog/1285332

 1 import java.io.Serializable;
 2 import java.util.ArrayList;
 3 import java.util.Arrays;
 4 import java.util.Collection;
 5 import java.util.regex.Matcher;
 6 import java.util.regex.Pattern;
 7 
 8 public class Test implements Serializable {
 9 
10     private static final long serialVersionUID = 2640934692335200272L;
11 
12     public static void main(String[] args) {
13 
14         // data segment
15         String[] SAMPLE_ARRAY = new String[] { "aaa", "solo", "king" };
16         String TEST_STR = "king";
17         Collection TEMPLATE_COLL = new ArrayList();
18         TEMPLATE_COLL.add("aaa");
19         TEMPLATE_COLL.add("solo");
20         TEMPLATE_COLL.add("king");
21         // <- data segment
22 
23         // 1, 字符串数组是否存在子元素
24         // 1-1, 直接使用API
25         Arrays.sort(SAMPLE_ARRAY);
26         int index = Arrays.binarySearch(SAMPLE_ARRAY, TEST_STR);
27         System.out.println("1-1_sort-binarySearche:"
28                 + ((index != -1) ? true : false));
29 
30         // 1-2, 使用正则(因Arrays.toString()引入了“, [ ]”故只在有限环境下可靠)
31         String tmp = Arrays.toString(SAMPLE_ARRAY);
32         Pattern p = Pattern.compile("king");
33         Matcher m = p.matcher(tmp);
34         System.out.println("1-2_toString-Regex:" + m.find());
35 
36         // 1-3, 都会写循环,略过。
37         // TODO: 循环数据依次比对,此处略去5行代码。
38 
39         // 2, 集合是否存在子元素
40         // 2-1, 最常用的contains
41         System.out.println("2-1_contains:" + TEMPLATE_COLL.contains(TEST_STR));
42 
43         // 2-1-1, 扩展:
44         // 按模板集合,将当前集合分为“模板已存在”与“不存在”两个子集。
45         Collection coll = new ArrayList<String>();
46         coll.add("aaa");
47         coll.add("bbb");
48         coll.add("ccc");
49         // 完整复制集合
50         Collection collExists = new ArrayList(coll);
51         Collection collNotExists = new ArrayList(coll);
52 
53         collExists.removeAll(TEMPLATE_COLL);
54         System.out.println("2-1-1_removeAll[exist]:" + collExists);
55         collNotExists.removeAll(collExists);
56         System.out.println("2-1-1_removeAll[notexist]:" + collNotExists);
57 
58     }
59 }

 

结果输出:

1-1_sort-binarySearche:true
1-2_toString-Regex:true
2-1_contains:true
2-1-1_removeAll[exist]:[bbb, ccc]
2-1-1_removeAll[notexist]:[aaa]

小结:

  1)数组至少三种: 
    A)binarySearch(,)。但条件是需要事先排序,开销需要考虑。 
    B)Regex。但需要将数组转为字符串,Arrays类提供的方法会引入“, [ ]”这三种分割符,可能影响判定结果。 
    C)循环比对。 

  2)集合至少两种: 
    A)循环。如果只是判定默认存在(非定制型存在),建议直接不考虑。 
    B)contains。能靠过来就果断靠吧。 

  3)集合提供了类似“加减”的运算,可以留意一下。 

 

转载于:https://www.cnblogs.com/DreamDrive/p/4724936.html

相关文章:

  • kexec机制
  • Spring事务配置的五种方式
  • buffer_head和bio
  • 关于人脸识别,稀疏表示的若干论文的小结
  • asp.net——正则表达式
  • 开始iOS 7中自动布局教程(一)
  • POJ 1470 Closest Common Ancestors
  • S3C2440-中文手册
  • URAL 1779 F - The Great Team 构造
  • 如何应用混沌进行置乱
  • Ruby源文件指引
  • poj 2828 块状链表 OR 线段树 OR 树状数组
  • Ruby用6行搞定P2P
  • Bootstrap中面板的使用
  • LCA rmq st model
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • ES6--对象的扩展
  • HTTP--网络协议分层,http历史(二)
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • JAVA之继承和多态
  • node入门
  • SSH 免密登录
  • 对超线程几个不同角度的解释
  • 仿天猫超市收藏抛物线动画工具库
  • 浏览器缓存机制分析
  • 听说你叫Java(二)–Servlet请求
  • 物联网链路协议
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • Nginx实现动静分离
  • NLPIR智能语义技术让大数据挖掘更简单
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​2021半年盘点,不想你错过的重磅新书
  • ​业务双活的数据切换思路设计(下)
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (离散数学)逻辑连接词
  • (数据结构)顺序表的定义
  • (一)为什么要选择C++
  • .jks文件(JAVA KeyStore)
  • .NET 反射的使用
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET6 命令行启动及发布单个Exe文件
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • [ NOI 2001 ] 食物链
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [Android] Amazon 的 android 音视频开发文档
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [C++] 多线程编程-thread::yield()-sleep_for()