`
zhaoningbo
  • 浏览: 609895 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
引言:

  今天群里有朋友问“怎么知道一个数组集合是否已经存在当前对象”,大家都知道循环比对,包括我这位大神群友。还有没其他办法呢?且看此篇。

正文:

  能找到这里的都是程序员吧,直接上代码应该更清楚些。

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test implements Serializable {

    private static final long serialVersionUID = 2640934692335200272L;

    public static void main(String[] args) {

        // data segment
        String[] SAMPLE_ARRAY = new String[] { "aaa", "solo", "king" };
        String TEST_STR = "king";
        Collection TEMPLATE_COLL = new ArrayList();
        TEMPLATE_COLL.add("aaa");
        TEMPLATE_COLL.add("solo");
        TEMPLATE_COLL.add("king");
        // <- data segment

        // 1, 字符串数组是否存在子元素
        // 1-1, 直接使用API
        Arrays.sort(SAMPLE_ARRAY);
        int index = Arrays.binarySearch(SAMPLE_ARRAY, TEST_STR);
        System.out.println("1-1_sort-binarySearche:"
                + ((index != -1) ? true : false));

        // 1-2, 使用正则(因Arrays.toString()引入了“, [ ]”故只在有限环境下可靠)
        String tmp = Arrays.toString(SAMPLE_ARRAY);
        Pattern p = Pattern.compile("king");
        Matcher m = p.matcher(tmp);
        System.out.println("1-2_toString-Regex:" + m.find());

        // 1-3, 都会写循环,略过。
        // TODO: 循环数据依次比对,此处略去5行代码。

        // 2, 集合是否存在子元素
        // 2-1, 最常用的contains
        System.out.println("2-1_contains:" + TEMPLATE_COLL.contains(TEST_STR));

        // 2-1-1, 扩展:
        // 按模板集合,将当前集合分为“模板已存在”与“不存在”两个子集。
        Collection coll = new ArrayList<String>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        // 完整复制集合
        Collection collExists = new ArrayList(coll);
        Collection collNotExists = new ArrayList(coll);

        collExists.removeAll(TEMPLATE_COLL);
        System.out.println("2-1-1_removeAll[exist]:" + collExists);
        collNotExists.removeAll(collExists);
        System.out.println("2-1-1_removeAll[notexist]:" + collNotExists);

    }

}

  运行结果:
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)集合提供了类似“加减”的运算,可以留意一下。



2
2
分享到:
评论
2 楼 ILoveDOUZHOU 2012-08-04  
学习了。
1 楼 zhaoningbo 2011-12-01  
拆分集合放反了,本来想直接上去改了。挂在这里提醒自己后面要多多细心吧~。=

相关推荐

    java判定数组或集合是否存在某个元素的实例

    下面小编就为大家带来一篇java判定数组或集合是否存在某个元素的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    java源码包2

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    3_2.rar_4 3 2 1_主元素_主元素的判定_分治 主元素

    主元素 线性选择算法主元素的判定(分治策略) 设T[0:n-1]是n个元素的数组,如果其中某个元素x在整个数组中的出现次数超过n/2,...请设计一个分治算法,判断数组T={1,2,2,2,3,4,3,2,2,4,2,2,6,7,2,2}中是否存在主元素。

    js代码-判断对象数组是否含有某个对象

    js代码-判断对象数组是否含有某个对象

    判定两个集合是否相等的概率算法

    这是在算法分析与复杂性课程里面,利用概率算法判定两个集合是否会相等的代码

    用二维数组实现魔方矩阵(含代码)

    本文档介绍了魔方矩阵的基本概念及其实现思路,并用二维数组进行实现,含详细代码,附注释。

    判定给定数组是否已排序

    写一个通用方法,用于判定给定数组是否已排好序,其中给定升序、等序和降序数组的判定方法和源代码。

    Lua判断一个目录或文件是否存在的方法

    主要介绍了Lua判断一个目录或文件是否存在的方法,Lua中可以使用io.open判断文件或目录是否存在,本文总结了判断方法,并给出了一个自定义函数,需要的朋友可以参考下

    JS判断数组中是否有重复值得三种实用方法

    数组中是否有重复值的判断方法有很多,本文为大家推荐下比较实用的3种方法,感兴趣的朋友可以参考下,希望对大家有所帮助

    Python中集合对象的创建和基本运算示例

    使用环境:需要先安装PyCharm(请自己百度下载安装),以及然后官网上下载Python 2.7版本,以及Python 3.7版本后,安装在自己的电脑上。...目的:帮助理解集合对象在Python中的具体创建和基本的集合运算。

    java源码包---java 源码 大量 实例

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    Java判定文件编码或文本流编码的方法[文].pdf

    Java判定文件编码或文本流编码的方法[文].pdf

    labview数组中统计奇偶计数.vi

    labview统计数组中奇数偶数个数,利用移位寄存器,用labview编写的奇偶计数程序,把第i次循环执行的结果作为第i+1次循环的输入,LabVIEW循环结构中的移位寄存器可以实现这种功能。

    java判断时间大小

    经常在网上搜东西都搜不到,更有人上传点没用了,现在我解决了就把解决方法上传上吧.

    python字典与集合.pdf

    python字典与集合

    JAVA上百实例源码以及开源项目源代码

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包4

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包3

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    判断给定有向图是否存在回路.zip_判定有向图是否存在回路

    判定有向图是否存在回路 输入约定 第一行为图中顶点的个数n; 第二行为途中弧度条数e; 第二行为顶点信息;接着e行为e条弧依附的两个顶点。

Global site tag (gtag.js) - Google Analytics