集合求并集(java算法)描述:有这样一组集合,每个集合中都至少有一个元素(A,X)其中A是常量,X变量。合并的原则是把X相同的集合合并
且满足合并的集合的交集只有(A,X)元素。
要求:高效
如下例中集合一和集合二需要合并。结果是{(A,1),(a,2),(b,3),(c,4),(c,3),(d,4)}集合一{(A,1),(a,2),(b,3),(c,4)}
集合二{(A,1),(c,3),(d,4)}集合三{(A,2),(a,2),(c,2)}
集合四{(A,3),(c,2),(f,5),(d,7)}
...
...
集合N

解决方案 »

  1.   

    ...
    难道用TreeSet的addAll(另外一个TreeSet)方法效率不高么?
    反正set里的元素不会重复,自然就是并集了
      

  2.   

    重写hashCode和equals方法,然后addAll就行了。
    至于高效。那要看你怎么判了,反正这么做在开发效率上应该是最高效了。
      

  3.   

    写了一个,求方家指正。
    Data.javapublic class Data implements Comparable{ private String name;
    private int value; public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    } public int getValue() {
    return value;
    } public void setValue(int value) {
    this.value = value;
    } public int compareTo(Object o) {
    // TODO Auto-generated method stub
    if (o instanceof Data) {
    Data d = (Data) o ;
    if (this.name.equals(d.name) && this.value == d.value) return 0 ; 
    }

    return 1;
    }}TestTreeSet.javaimport java.util.Iterator;
    import java.util.TreeSet;
    public class TestTreeSet { public static void main(String args[]) {
    TreeSet t = new TreeSet() ;
        init(t) ;
        print(t) ;
    }

    public static void init(TreeSet t) {

    Data d = new Data() ;
    d.setName("A") ;
    d.setValue(1) ;
    t.add(d) ;
            Data d1 = new Data() ;
            d1.setName("B") ;
            d1.setValue(2) ;
            t.add(d1) ;
            
            Data d2 = new Data() ;
            d2.setName("A") ;
            d2.setValue(1) ;
            t.add(d2) ;
    }

    public static void print(TreeSet t) {
    Iterator it = t.iterator() ;
    while (it.hasNext()) {
    Data d = (Data)it.next() ;
    System.out.println(d.getName()) ;
    System.out.println(d.getValue()) ;
     
    }
    }
    }
      

  4.   

    我觉得HashSet就行,没必要用TreeSet。
      

  5.   

    如果不需要自定义排序的话,hashSet确实也够了,
    至于用数组嘛,我觉得遍历也许快点?但是变长的时候不是慢了?