`

Set判重操作实现

阅读更多
需求:Set<Po>判重操作实现

问题:Set<Po>未进行排重

分析:对于基本数据相应的封装类的泛型;由于相应的封装类已经重写Object的hashcode与equals方法,故能够进行唯一性的区分

解决:

1.原集合

举例:

public class Man {
	private int id ;
	private String name ;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "Man [id=" + id + ", name=" + name + "]";
	}
}

单元测试类:
	public static void main(String[] args) {

		Set<Man> set = new HashSet<Man>();
		Man m = new Man();
		m.setId(1);
		m.setName("1");
		Man m2 = new Man();
		m2.setId(1);
		m2.setName("2");
		set.add(m);
		set.add(m2);
		System.out.println("集合长度:"+set.size()+" "+"集合内容:"+set.toString());
	}

Console窗口输出
集合长度:2 集合内容:[Man [id=1, name=1], Man [id=1, name=2]]

2.改进,在Po类中重写 object 类中的 hashCode 与 equals 方法

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + id;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Man other = (Man) obj;
                // 指定唯一的条件,即PO类是通过哪一个字段判断唯一性的
		if (id != other.id)
			return false;
		return true;
	}

Console窗口输出
集合长度:1 集合内容:[Man [id=1, name=1]]

操作:
Eclipse中提供了重写方法的快捷方式:source -> generate hashcode() and equals ->
选择属性

原因:

参考文献:http://lukuijun.iteye.com/blog/340520
分享到:
评论

相关推荐

    work操作题自动判卷

    ### Word操作题自动判卷系统的关键技术与实现 #### 一、引言 随着信息技术的发展,计算机应用技能已成为高等教育中的重要组成部分。特别是在高等农业院校,《大学计算机基础》课程已成为必修科目之一,其中Word字...

    c++链栈源代码实现

    #### 关键操作实现 1. **置空(setnull)**:将链栈清空。 ```cpp void setnull(LinkedStack&lt;T&gt; &s) { while (!s.isEmpty()) { s.pop(); } } ``` 2. **判空(isEmpty)**:检查链栈是否为空。 ```cpp bool ...

    链表栈的实现

    对于队列的算法,考核内容是实现基本的队列操作,包括置空队列、入队(enqueue)、出队(dequeue)。队列是一种先进先出(FIFO)的数据结构。在循环链表表示的队列中,只需要一个指针指向队尾,因为队头是通过队列的...

    课程设计2020214380杨佳辉.cpp

    增加用户:添加新用户信息并初始化(注意不重复添加,要判重); 注销账号:对用户进行临时冻结; 激活账号:对冻结的账号解封; 查看业务信息(查看所有用户/指定用户信息、查看指定时间段业务交易情况(取款、存款...

    WEB应用技术 JavaBean技术应用

    这部分逻辑应在`doLogon.jsp`中实现,但实验内容并未给出具体实现,通常会使用条件语句(如`if-else`)来完成这一功能。 通过这个实验,学生能够了解到JavaBean如何在Web应用中作为数据容器工作,以及如何在JSP页面...

    00-链表预备知识_代码_.zip

    - **单链表(Single Linked List)**: 包含`linkSet`和`orderList`可能就是对单链表的操作。单链表的每个节点包含一个数据元素和一个指向下一个节点的指针。在单链表中,只能向前遍历。 - **循环链表(Circular ...

    数据结构第三章.pdf

    顺序栈的操作如SETNULL、EMPTY、PUSH、POP和TOP在给出的代码中都有具体实现。需要注意的是,顺序栈可能出现上溢(当栈满时尝试进栈)和下溢(当栈空时尝试退栈)的情况。 对于多个顺序栈共用空间的情况,可以减少...

    数据结构复习(2016年下)1

    - **堆栈(STACK)**:遵循“后进先出”(FILO)原则,常用操作有压栈(push)、弹栈(pop)、判空(is_empty)、判满(is_full)。 - **队列(QUEUE)**:遵循“先进先出”(FIFO)原则,常用操作有入队(enqueue...

    松下FA检查.判別.测量用传感器GD系列样本.pdf

    数字式面板控制器使操作变得更加直观,并能够通过外部通信接口如RS-232C进行控制信号的交换,实现远程控制和参数设置。 7. 检测水平指示灯和基准值微调功能: 检测水平指示灯有助于操作者快速判断当前检测的状态和...

    数据结构单链表课程设计报告完整版

    以下是实现这些操作的关键步骤: 1. **设置空队列(setnull())**:初始化队列为空,所有指针都为NULL。 2. **获取队首元素(getfirst())**:检查队列是否为空,如果不为空,则返回队首元素(第一个节点的data域),并...

    计算机组成原理试卷答案.doc

    9. **微操作命令和微操作**:微操作命令是控制执行微操作的指令,微操作是这些命令控制下的基本操作,是实现机器指令的物理动作。 10. **快速缓冲存储器(Cache)**:一种高速缓存,位于CPU和主存之间,用于临时...

    LeetCode---C++实现

    《LeetCode---C++实现》是一本专注于C++编程语言解决LeetCode在线判题平台上的算法问题的书籍。LeetCode是程序员广泛使用的平台,它提供了大量的编程题目来提升编程技能和算法理解,尤其对于准备面试的程序员来说,...

    判断程序是否运行的源程序

    本节将深入探讨如何使用VB来实现这一功能,包括解析相关知识点、代码示例以及背后的逻辑。 首先,我们需要了解Windows操作系统中的进程概念。进程是系统中正在执行的程序的实例,每个进程都有一个唯一的进程ID(PID...

    ACM大赛基础-数据结构和STL.pptx

    在C++中,STL提供了`stack`容器来实现栈,提供了如`empty()`、`pop()`、`push()`和`top()`等成员函数来检查栈的状态和操作元素。 2. 向量(Vector):向量是动态数组,支持随机访问。在C++的STL中,`vector`是一个...

    asp在线考试系统(asp+access实现)

    现阶段虽只实现了试卷的客观题部分,但已具有用户注册、多用户同时等级考试、动态随机出题、时间控制、自动判卷,试题录入、修改题库、用户治理、科目治理、治理员治理、分数治理等重要功能,也就是说实现了真正的无...

    数据结构课程设计及论文

    - 实现栈操作:编写置空、判空、进栈、退栈和取栈顶元素的函数。 - 遍历二叉树:分别使用递归和栈的方法实现先根、中根、后根遍历。 - 调用子函数:在`main()`函数中调用上述功能函数,完成整个设计。 在实际...

    Android 敏感词过滤

    4. **误判与漏判**:平衡过滤效果与用户体验,避免误判导致正常内容被过滤,同时也要尽力减少漏判。 5. **国际化**:考虑到多语言环境,敏感词库应支持多种语言。 总的来说,`Android 敏感词过滤`是Android应用中...

Global site tag (gtag.js) - Google Analytics