开发者学堂课程【Java 高级编程:分析重复元素消除】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/20/detail/410
分析重复元素消除
目录:
一、 简介
二、 范例:实现重复元素处理
三、 总结
一、 简介
TreeSet 子类是利用了 Comparable 接口来实现了重复元素的判断,但是 Set 集合的整体特征就是不允许保存重复元素。
HashSet 判断重复元素的方式并不是利用 Comparable 接口完成的,它利用的是Object 类中提供的方法实现的.
对象编码: public int hashCode(); .
对象比较: public boolean equals(Object obj);
在进行重复元素判断的时候首先利用 hashCode() 进行编码的匹配,如果该编码不存在则表示数据不存在,证明没有重复,如果该编码存在了,则进一步进行对象比较处理,如果发现重复了,则此数据是不允许保存的。如果使用的是 Eclipse 开发工具,则可以帮助开发者自动创建 hashCode() 与 equals() 方法,以此简化我们的开发。
二、范例:实现重复元素处理
package cn.mldn.demo;
import java.util.Set;
class Person //比较器
private String name·3
private int age;
public Person(String name,int age)f
this.name = name;
this.age = age ;
@Override
public int hashCode()
final int prime=31;
int result =1;
result=prime* result + age;
result = prime*result +((name== nul1)? e: name.hashCode())
return result;
@Override
public boolean equals(Object obj) [
if (this == obj)
return true;
if (obj == null)
if (getClass()!= obj.getClass())
return false;
Person other =(Person) obj;
if (age l= other.age)
return false;
if (name== null)
if (other.name!= null)
return false;
] else if(!name.equals(other.name))
return false;
return true;
public String toString()
return "姓名:” + this.name +"、年龄:”+ this.age
public class JavaAPIDemo
public static void main(String[] args) throws Exception
[Setall= new HashSet();//为List父接口进行实例化
all.add(new Person("张三",19));
all.add(new Person("李四",19)); //年龄相同,但是姓名不同
all.add(new Person("王五”,20)) ;//数据重复
all.add(new Person("王五”,2e));//数据重复
all.add(new Person("小强”,78));
all.forEach(System.out::println);
三、总结
在 Java 程序之中真正的重复元素的判断处理利用的就是 hashCode() 与 equals() 两个方法共同作用完成的,而只有在排序要求情况下 (TreeSet) 才会利用Comparable 接口来实现。