分析重复元素消除|学习笔记

开发者学堂课程【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 接口来实现。

上一篇:算法面试真题详解:背包问题 V


下一篇:【leetcode】力扣 --- 日积月累,每日一题——6 移除元素