JavaでのTreeSetの重複データのマージ
TreeSetとHashSetの違い:
TreeSetは自動的に自然ソート法で要素をソートし、対応するパフォーマンスが低下します.一方、HashSetは要素のhashCodeに基づいて自動的に要素をソートします.ソート機能を使用する必要がない場合は、HashSetを使用する必要があります.
対応するTreeSetを使用するオブジェクトは、Comparableインタフェースを実装し、comparareToメソッドを書き換える必要があります.
重複データのマージ:重複データが発生した場合は追加しませんが、重複データの内容を変更します.ネット通販と似ています.同じ注文を追加すると、複数のレコードを追加するのではなく、数量に1を追加するだけです(個人的には、本当のネット通販がどのように処理されているかは分かりません).
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