JavaでのTreeSetの重複データのマージ


TreeSetとHashSetの違い:
TreeSetは自動的に自然ソート法で要素をソートし、対応するパフォーマンスが低下します.一方、HashSetは要素のhashCodeに基づいて自動的に要素をソートします.ソート機能を使用する必要がない場合は、HashSetを使用する必要があります.
対応するTreeSetを使用するオブジェクトは、Comparableインタフェースを実装し、comparareToメソッドを書き換える必要があります.
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