`
zhaoningbo
  • 浏览: 620558 次
  • 性别: 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中实现这一功能。我们将详细讨论以下几种方法: 1. **数组中的元素判断**: - **方法1-1**: 使用`Arrays....

    Wuziqi.zip_一维 数组 五子_一维数组 五子

    在编程领域,数组是一种基础且重要的数据结构,用于存储同类型的数据集合。在这个特定的案例中,"Wuziqi.zip_一维 数组 五子_一维数组 五子" 提到了一个使用一维数组实现的JAVA五子棋程序。五子棋是一个双人对弈的...

    JAVA实现求矩阵表示的无向图的欧拉通路、回路及欧拉图判定

    邻接矩阵是一个二维数组,其中的元素表示对应节点之间是否存在边。若存在边,元素值为1,否则为0。以下是一些关键步骤: 1. **读取矩阵**:首先,我们需要读取输入的矩阵数据,可以使用二维数组存储。每个元素代表...

    Java常用词汇(java英语)

    29. **Satisfiability**(可满足性):逻辑问题,确定是否存在一组赋值使布尔表达式为真,Java中的SAT求解器可用于解决此类问题。 30. **Graph Problems**(图论问题):涵盖图的遍历、连通性、最短路径等,Java中...

    完整版 Java基础入门教程 Java程序语言设计 02 java语法基础 Java语法基础2(共24页).ppt

    数组是存储同类型元素的有序集合。在Java中,可以声明一维或多维数组。多维数组实质上是数组的数组,可用于创建矩阵或其他复杂的结构。 5. **移位运算符**: Java提供了左移(),右移(&gt;&gt;)和无符号右移(&gt;&gt;&gt;)...

    corejava版五子棋游戏

    在这个五子棋游戏中,数组可能被用来存储棋盘的状态,每个元素代表棋盘上的一个位置,可以是空、黑棋或白棋。例如,可以定义一个二维数组来表示棋盘的行和列。 2. **结构控制语句**: - **循环**:如for和while,...

    JAVA五子棋人机对战版

    这涉及到数组或集合数据结构的使用,用于存储棋盘状态,并进行遍历检查。 4. **人工智能(AI)**:人机对战模式下,程序需要一个能与玩家对弈的AI算法。简单的AI可能采用固定模式或预设策略,复杂的AI可能使用搜索...

    Java毕业生校外实习日记.doc

    Java 毕业生校外实习日记 本文档记录了 Java 毕业生的校外实习日记,涵盖了 Java 基础内容、Java 网络编程、JDBC、泛型、反射等知识点。 Java 基础内容 * 线程(Thread):多用户同时工作的机制 * 集合...

    一个小型的图形界面三子棋java程序

    4. 数据结构:使用数组或集合来存储和操作游戏状态。 5. 面向对象编程:类的设计、继承、封装和多态。 6. 游戏逻辑的实现:编写判断游戏状态和胜负的算法。 总的来说,这个小型的三子棋Java程序是一个很好的学习...

    AIC的Java课程1-6章

    第3章 面向过程(数组和方法) 4课时  理解如何声明数组、构造数组、初始化数组以及使用数组中的各个元素。  清楚数组作为对象处理,创建数组对象时指定数组大小。  能够声明和操作多维数组...

    Java基础入门一.pdf

    集合框架(Collection & Map)是Java中用于存储对象的数据结构,包括数组(Array)、List、Set、Map等类型。数组的特点是大小类型固定、性能高效且支持边界值检查,但它只能反映最大容量而不反映实际使用大小。Java....

    java基础制作勇士与恶龟小游戏小项目。

    8. **数据结构**:可能使用数组或集合(如ArrayList、LinkedList)来存储游戏中的角色、道具等信息,方便管理和操作。 9. **算法**:游戏逻辑中可能包含各种算法,比如勇士和恶龟的移动路径规划、战斗伤害计算等。 ...

    java小游戏合集源码

    Java小游戏合集源码是一个包含了多种经典小游戏的代码集合,主要使用Java编程语言进行开发。这个资源对于初学者和有经验的开发者来说都是一个宝贵的参考资料,可以帮助他们学习和理解如何用Java实现游戏逻辑,增强...

    src.rar_ Binary search java_KMP_PKU_java pku_并查集算法

    其基本思想是每次比较中间元素,根据比较结果缩小搜索范围,直到找到目标元素或确定不存在为止。二分搜索的时间复杂度为O(log n),在大量数据中具有很高的效率。在Java中,通常通过while循环或者递归的方式来实现二...

    几个幷查集基本题目以及完成的标程

    5. **代码实现**:并查集的实现通常采用数组或链表来存储每个元素的父节点。在C++中,可以使用vector或list来实现,Java中可以使用ArrayList或LinkedList。实现的关键在于设计高效的Find和Union函数。 6. **学习...

    扑克牌游戏 java源码

    开发者可能使用了Java的Swing或JavaFX库来构建游戏的图形用户界面(GUI),这些库提供了丰富的组件和方法,可以方便地创建窗口、按钮、文本框等元素,使得用户能直观地与游戏进行交互。 其次,扑克牌游戏的实现涉及...

    java贪吃蛇、俄罗斯方块、五子棋源码_greenfoot贪吃蛇模板,greenfoot连连看小游戏

    在Java中,这通常涉及到数组或集合来表示游戏地图,以及循环和条件判断来处理蛇的移动和碰撞。Greenfoot提供了场景和对象的概念,使得编写这样的游戏更为直观,它允许开发者通过简单的脚本来控制对象的行为。 接...

    人狼大战 java源代码

    5. **数据结构与算法**:为了存储和管理玩家信息、角色分配以及游戏状态,开发者可能使用了数组、链表、集合框架等数据结构。此外,判断胜负、确定夜间杀戮目标等可能涉及到特定的算法。 6. **网络编程**:如果游戏...

    core java终结版

    - **数组**是一组相同类型数据的集合,通过索引访问。 - **创建数组**需先声明数组类型和长度,再初始化数组元素。 - **数组的内建属性LENGTH**:表示数组中元素的数量。 ### 五、对象和类 - **面向对象编程的3个...

Global site tag (gtag.js) - Google Analytics