`
edr_
  • 浏览: 166221 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java中TreeSet合并重复数据

    博客分类:
  • J2SE
阅读更多
TreeSet与HashSet之间的区别:
TreeSet会自动按自然排序法给元素排序,相应的性能会差一点。而HashSet是根据元素的hashCode自动给元素排序的,如果我们不需要使用排序功能,则应该使用HashSet。
相应的使用TreeSet的对象需要实现Comparable接口,并重写compareTo方法。
package com.test;

public class T implements Comparable<T>{
	private int t_id;
	private String t_name;
	T(int id,String name) {
		this.setT_id(id);
		this.setT_name(name);
	}
	public int getT_id() {
		return t_id;
	}
	public void setT_id(int t_id) {
		this.t_id = t_id;
	}
	public String getT_name() {
		return t_name;
	}
	public void setT_name(String t_name) {
		this.t_name = t_name;
	}
	public int compareTo(T o) {
		if (this.getT_id()<o.getT_id()) {
			return -1;
		}if (this.getT_id()>o.getT_id()) {
			return 1;
		}else {
        //如果t_id相等的话就无法添加
			return 0;
		}
	}
	
}
package com.test;

import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;


public class Test_Set {
	
	public static void main(String[] args) {
		T t0=new T(4,"t0000");
		T t1=new T(2,"t1111");
		T t2=new T(3,"t2222");
		Set<T> set=new TreeSet();
		set.add(t0);
		set.add(t1);
		set.add(t2);
		System.out.println(set.size());
		for (Iterator iterator = set.iterator(); iterator.hasNext();) {
			T t = (T) iterator.next();
			System.out.println("value="+t.getT_id());
		}
	}
	
}
输出结果:
3
value=2---t1111
value=3---t2222
value=4---t0000

合并重复数据:
当出现重复数据时不添加,但是在更改重复数据的内容-类似于网购:如果你添加相同的订单,它只会在数量上加1而不是添加多一条记录(个人理解,至于真正的网购是怎么处理的我也不清楚)。
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class T implements Comparable<T>{
	private int t_id;
	private int t_num;
	private String t_name;
	T(){
	}
	T(int id,int num,String name) {
		this.setT_id(id);
		this.setT_num(num);
		this.setT_name(name);
	}
	public int getT_id() {
		return t_id;
	}
	public void setT_id(int t_id) {
		this.t_id = t_id;
	}
	public int getT_num() {
		return t_num;
	}
	public void setT_num(int t_num) {
		this.t_num = t_num;
	}
	public String getT_name() {
		return t_name;
	}
	public void setT_name(String t_name) {
		this.t_name = t_name;
	}
	public int compareTo(T o) {
		if (this.getT_name().equals(o.getT_name())) {
//重复不添加,只修改其中的num值--o为set中存在的对象
			o.setT_num((this.getT_num())+o.getT_num());
			return 0;
		}else {
//固有排序
			if (this.getT_id()<o.getT_id()) {
				return -1;
			}
			if (this.getT_id()>o.getT_id()) {
				return 1;
			}
			else {
				//如果t_id相等的话就无法添加
				return 0;
			}
		}
	}
	public static void main(String[] args) {
		T t0=new T(0,1,"t0000");
		T t1=new T(1,1,"t1111");
		T t2=new T(2,1,"t2222");
		T t2_add=new T(2,9,"t2222");
		Set<T> set=new TreeSet();
		set.add(t0);
		set.add(t1);
		set.add(t2);
		set.add(t2_add);
		System.out.println(set.size());
		for (Iterator iterator = set.iterator(); iterator.hasNext();) {
			T t = (T) iterator.next();
			System.out.println("value="+"---"+t.getT_id()+"---"+"数量:"+t.getT_num()+"---"+t.getT_name());
		}
	}
}
输出结果:
3
value=---0---数量:1---t0000
value=---1---数量:1---t1111
value=---2---数量:10---t2222    //原来数量为1的,后来加了一条数量为9的数据



分享到:
评论

相关推荐

    Java面试宝典2010版

    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 2、编写一个程序,将d:\java目录下的所有.java文件复制到d:\...

    Java面试宝典-经典

    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...

    java面试题大全(2012版)

    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...

    Java JDK实例宝典

    第1章 Java基础 1.1 转换基本数据类型 1.2 Java的运算符 1.3 控制程序的流程 1.4 计算阶乘 1.5 实现命令行程序 第2章 Java面向对象程序设计 2. 1 复数类 2. 2 equals.chashCode...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例058 用TreeSet生成不重复自动排序 随机数组 71 实例059 Map映射集合实现省市级联选择框 73 第4章 字符串处理技术 75 4.1 格式化字符串 76 实例060 把数字格式化为货币字符串 76 实例061 格式化当前日期 77 实例...

    最新Java面试宝典pdf版

    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...

    Java面试笔试资料大全

    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...

    java面试宝典2012

    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 67 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...

    JAVA面试宝典2010

    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...

    Java面试宝典2012新版

    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...

    Java面试宝典2012版

    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到...

    Java 面试宝典

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? ...... 7 2、Java 有没有 goto? .......................................................................................................

Global site tag (gtag.js) - Google Analytics