java中的javaset集合合是如何去重复的

利用Java Set 去除重复object的方法
转载 &更新时间:日 11:09:33 & 投稿:jingxian
下面小编就为大家带来一篇利用Java Set 去除重复object的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
实例如下:
import java.util.ArrayL
import java.util.HashS
import java.util.L
import java.util.S
* 编写者:CP
* &br /&类描述:set集合针对String 类型和8大基础数据类型 过滤掉重复数据,如果存放的是其他类型对象,则需要重写hashCode方法和equals方法,当equals 比较相等时,则会去比较hashCode值 hashCode的值 如果一致的话,则不会存进set
public class SetDemo {
public static void main(String[] args) {
Set&String& nameSet = new HashSet&String&();
nameSet.add("张三");
nameSet.add("李四");
nameSet.add("王五");
nameSet.add("张三");
// 输出结果 张三 李四 王五
for(String name : nameSet){
System.out.print(name + "\t");
// List集合去除重复基础数据
List&String& nameList = new ArrayList&String&();
nameList.add("张三");
nameList.add("李四");
nameList.add("王五");
nameList.add("赵六");
nameSet.addAll(nameList);
// 输出结果 张三 李四 王五 赵六
for(String name : nameSet){
System.out.print(name + "\t");
// 去除编号和用户名一样的 对象,需要重写 equals 方法 和 hashCode方法
User admin = new User(1, "admin");
User user = new User(2, "user");
User user1 = new User(2, "user");
User admin1 = new User(3, "admin");
Set&User& userSet = new HashSet&User&();
userSet.add(admin);
userSet.add(user);
userSet.add(admin1);
userSet.add(user1);
// 输入结果 admin1 admin3 user2
for(User u : userSet){
System.out.print(u.username + u.id + "\t");
System.out.println(user.equals(null));
class User{
protected I
protected S
public User(Integer id, String username){
this.username =
* 如果对象类型是User 的话 则返回true 去比较hashCode值
public boolean equals(Object obj) {
if(obj == null)
if(this == obj)
if(obj instanceof User){
User user =(User)
if(user.id = this.id) // 只比较id
// 比较id和username 一致时才返回true 之后再去比较 hashCode
if(user.id == this.id && user.username.equals(this.username))
* 重写hashcode 方法,返回的hashCode 不一样才认定为不同的对象
public int hashCode() {
return id.hashCode(); // 只比较id,id一样就不添加进集合
return id.hashCode() * username.hashCode();
以上这篇利用Java Set 去除重复object的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Java集合HashSet中的两个对象怎样算重复
集合HashSet中对象的特点是无序、不允许重复。无序好理解,那么两个什么样的对象算重复呢?
两个对象重复意味着这两个对象的内容相同、hashcode值也相同。
()两个对象和内容相同,表示的值为。
(不重写的话,默认方法是调用进行判断的,判断的是两个对象的引用是否相同)
()如果你不重写方法的话,两个对象的值在默认情况下是不可能相同的。
hashCode()方法继承自类。每个对象在创建的时候会被分配一个唯一的值(一个整形的值)。所以不重写方法的话,两个对象的值是不会相同的。
注意的方法已经被重写,所以两个不同的对象的值有可能相同,比如下面的式子的最终结果将是,虽然和是两个不同的对象。
String str0 = new
String("Hello!");
String str = new String("Hello!");
System.out.println(str0.hashCode()==str.hashCode());
只有同时满足以上两个条件的对象,才能算的上重复,这两个对象在加入到HashSet中的时候只能添加进一个。
两个hashcode值相等的对象,equals()返回值不一定为true;而如果两个对象的equals方法返回值为true,则两个对象的hashcode值必须相同,也即如果你重写equals()方法的话,则你必须重写hashCode()方法。
另外:还有一个我们经常用到的是判断两个对象的引用是否相等,即使用”=="符号进行判断,引用表示的是对象在内存(堆)中的存放地址,很显然两个不同的对象的地址是不可能相等的,即使两个对象的值相等(equals()结果返回true)。例如下面的例子讲分别返回true和false。
String str0 =
new String("Hello!");&
String str = new String("Hello!");&
System.out.println(str0.equals(str));
System.out.println(str0==str);
HashSet:重复的对象不能同时加进HashSet容器中,就要重写HashCode和equals方法
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。利用set针对list去重复是个好办法,记录下下。
只是针对list中的object进行了去重复的处理,如果是要依据object中的某个值进行去重复处理还是达不到目标。这里仅做依据set去重复的一个记录,在实际项目中并没有这么简单的结构等着我们去重复。
大家有好的脑洞,一起分享下。
import java.util.*;
* 针对list去重复处理
* @author zhangss
* @version 1.0
public class ListDistinct &T&{
* 通过set去重, 不打乱原有list的顺序
list中相同的对象会被去重复
* @param List&T& list
* @return List&T&
public List&T& distinctBySetOrder(List&T& list){
Set&T& set = new
HashSet&T&();
List&T& newList = new
ArrayList&T&();
for (T t :list) {
if(set.add(t)){
newList.add(t);
return newL
* 通过set去重, 顺序可能会乱
list中相同的对象会被去重复
* @param List&T& list
* @return List&T&
public List&T& distinctBySet(List&T& list){
return new ArrayList&T&(new HashSet&T&(list));
* 通过遍历判断后将赋予新的集合
* @param List&T&
* @reutrn List&T&
public List&T& distinctByANewList(List&T& list){
List&T& newList = new
ArrayList&T&();
for(T t : list){
if(!newList.contains(t)){
newList.add(t);
return newL
public static void main(String[] args){
ListDistinct&String& ld = new ListDistinct&String&();
List&String& list
ArrayList&String&();
list.add("zhang");
list.add("zhang");
list.add("ss");
list.add("ss");
list.add("2s");
list.add("s3");
System.out.println("1:" + ld.distinctBySetOrder(list).toString());
System.out.println("2:" + ld.distinctBySet(list).toString());
System.out.println("3:" + ld.distinctByANewList(list).toString());
阅读(...) 评论()博客分类:
java中Set有这样一个方法,.addAll( Collection c),直接加入List集合,去掉重复的数据。
public static void main(String[] args) {
set=new HashSet();
set.add("abc");
set.add("cde");
set.add("efg");
set.add("fgh");
set.add("abc"); //重复的abc,set会自动将其去掉
System.out.println("size="+ set.size() );
List list = new ArrayList();
list.add("abc");
list.add("aaa");
list.add("fff");
set.addAll(list); //将list中的值加入set,并去掉重复的abc
System.out.println("size="+ set.size() );
for( Iterator
it = set.iterator();
it.hasNext(); )
System.out.println("value="+it.next().toString());
浏览 35622
浏览: 1700903 次
来自: 哈尔滨
今天也跟着学习了,用到了
讲解的很不错。URLConnection类的内容也可以看这篇文 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'关于Set集合的详细介绍
原创
 14:45:38
471
这篇文章主要介绍了Java Set集合的遍历及实现类的比较的相关资料,需要的朋友可以参考下Java Set集合的遍历及实现类的比较Java中Set集合是一个不包含重复元素的Collection,首先我们先看看遍历方法package com.
import java.util.HashS
import java.util.I
import java.util.S
* 一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,
&nb1. 简介:这篇文章主要介绍了Java Set集合的遍历及实现类的比较的相关资料,需要的朋友可以参考下2. 简介:假设在python中有一字典如下:x={‘a':'1,2,3', ‘b':'2,3,4'}需要合并为:x={‘c':'1,2,3,4'}需要做到三件事: 1. 将字符串转化为数值列表 2. 合并两个列表并添加新的键值 3. 去除重复元素第1步通过常用的函数eval()就可以做到了,第2步需要添加一个键值并添加元素,第3步利用set集合的性质3. 简介:这篇文章详解python-set集合类方法的详细介绍4. 简介:Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)。Java集合框架如下图: 由上图可以看到Java框架主要是C5. 简介:TreeSet是一个有序的集合,它的作用是提供有序的Set集合。它继承了AbstractSet抽象类,实现了NavigableSet,Cloneable,Serializable接口。TreeSet是基于TreeMap实现的,TreeSet的元素支持2种排序方式:自然排序或者根据提供的Comparator进行排序。TreeSet的接口依赖图:从图中可以看出:(1)T6. 简介:经常用到,有时候不只是简单的基本类型,那种可以用set集合去重,好多时间用到的是我们自定义的类型,下面举个例子(我这儿就那int举例了):方法一、 这种类似与选择排序算法,首先我们取i值,然后将i之后的所有重复的去掉。具体实现如下:[java] view plain copy import java.util.L
imp7. 简介:这篇文章主要介绍了Python常用知识点汇总,包括Set集合,函数,深入拷贝,浅入拷贝,需要的朋友可以参考下8. 简介:下面小编就为大家带来一篇浅谈Python 集合(set)类型的操作——并交差。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧9. 简介:下面小编就为大家带来一篇java中循环遍历删除List和Set集合中元素的方法(推荐)。小编觉得挺不错的,在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧10. 简介:下面小编就为大家带来一篇java中循环遍历删除List和Set集合中元素的方法(推荐)。小编觉得挺不错的,在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧【相关问答推荐】:以上就是关于Set集合的详细介绍的详细内容,更多请关注php中文网其它相关文章!
江湖传言:PHP是世界上最好的编程语言。真的是这样吗?这个梗究竟是从哪来的?学会本课程,你就会明白了。
PHP中文网出品的PHP入门系统教学视频,完全从初学者的角度出发,绝不玩虚的,一切以实用、有用...
点击数(110819)
ThinkPHP是国内最流行的中文PHP开发框架,也是您Web项目的最佳选择。《php.cn独孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架常识开始,将...
点击数(108743)
《php.cn原创html5视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了HTML知识。
点击数(83498)
本套教程,以一个真实的学校教学管理系统为案例,手把手教会您如何在一张白纸上,从零开始,一步一步的用ThinkPHP5框架快速开发出一个商业项目。
点击数(82669)
所有计算机语言的学习都要从基础开始,《PHP入门视频教程之一周学会PHP》不仅是PHP的基础部分更主要的是PHP语言的核心技术,是学习PHP必须掌握的内容,任何PHP项目的实现都离不开这部分的内容,通...
点击数(79893)
PHP开发工程师
文章总浏览数
相关视频章节

我要回帖

更多关于 set集合删除 的文章

 

随机推荐