项目中遇到的算法问题

本人碰到一个比较棘手的算法问题,问题描述如下:一个arrayList中含有若干个对象,每个对象有两个属性和content,要求如下:只要title或者content其中一个相同,则认为是相同对象,输出排重后的对象(相同对象输出其中一个即可)和重复和个数
Class A {
String title,
String content
};

ArrayList arrayList = new ArrayList();
A a1 = New A();
a1.title = T1;
a1.content = C1;
arrayList.add(a1);

A a2 = New A();
a2.title = T1;
a2.content = C2;
arrayList.add(a2);

A a3 = New A();
a3.title = T2;
a3.content = C2;
arrayList.add(a3);

A a4 = New A();
a4.title = T2;
a4.content = C1;
arrayList.add(a4);

A a5 = New A();
a5.title = T5;
a5.content = C5;
arrayList.add(a5);

最后程序运行完成后,输出 a1(4),a5(1)
程序解释:a1、a2、a3、a4是相同对象,原因:a1.title = a2.title,a2.content = a3.content,a4.title = a3.title,
哪位帮忙写一下代码或者思路

package com.auto.main;

import java.util.ArrayList;
import java.util.List;

public class Test {

public static void main(String... strings){

    ArrayList<A> arrayList = new ArrayList<A>();
    A a1 = new A(); 
    a1.title = "T1"; 
    a1.content = "C1"; 
    arrayList.add(a1); 

    A a2 = new A(); 
    a2.title = "T1"; 
    a2.content = "C2"; 
    arrayList.add(a2); 

    A a3 = new A(); 
    a3.title = "T2"; 
    a3.content = "C2"; 
    arrayList.add(a3); 

    A a4 = new A(); 
    a4.title = "T2"; 
    a4.content = "C1"; 
    arrayList.add(a4); 

    A a5 = new A(); 
    a5.title = "T5"; 
    a5.content = "C5"; 
    arrayList.add(a5); 

    Test t = new Test();
    //System.out.println(t.get(arrayList));
    List<List<A>> llist = t.get(arrayList);
    for(List<A> l:llist){
        System.out.println("========start===========");
        for(A a : l){
            System.out.println(" a.content=" + a.content + ";a.title=" + a.title);
        }
        System.out.println("========end===========");
    }

}
/**
 * 
 * @param aList
 * @return
 */
public List<List<A>> get(List<A> aList){
    List<List<A>> result = new  ArrayList<List<A>>();

    List<A> key = new ArrayList<A>();
    result.add(key);

    key.add(aList.get(0));
    aList.remove(0);

    aList= process(aList,result);
    while(!aList.isEmpty()){
        aList= process(aList,result);
    }

    return result;
}

List<A> process(List<A> aList,List<List<A>> result){
    List<A> key = result.get(result.size()-1);//最后一个

    for(int i=0;i<aList.size();i++ ){
        A m  = aList.get(i);
        for(A k : key){
            if(m.content.equals(k.content)||m.title.equals(k.title)){
                key.add(m);
                aList.remove(i);
                return aList;
            }
        }
    }

    List<A> ss = new ArrayList<A>();
    ss.add(aList.get(0));
    aList.remove(0);
    result.add(ss);     

    return aList;
}

}

/**
无聊啊,把代码写了下
*/

重写hashcode 和equals 。

只要title或者content其中一个相同,则认为是相同对象,

这个业务规则貌似有二义性的.请看分析.

{"a","m"}={"a","n"}={"b","n"}

{"a","m"}={"b","n"},按照这个意思就是所有的Class A 的对象是一样的.

不知道我理解的对不对,改业务规则吧~

哦 我弄错了,这个问题有解!是这样处理的.

List result =new ArrayList();//这个列表存的对象是列表
for(arrayList){

A a ;

for(result ){
//1个个判断,在的话就加进去,不再的话就新建一个List加到result

}

}

汗,当arrayList(下面称集合)的值不同会导致不同的结果(就是说判断对象是否相等依赖集合)。

1建一个结果列表result,然后丢进去第一个,将第一个从集合删除。
2设置标志是否有放入,然后遍历集合,如果相等则放入,并从集合删除。
3如果标志为有放入,则需要转2继续处理,否则4。
4集合不为空,取第一个放入result,然后类似转1.直到集合为空结束。

关键业务是否是这样,很奇怪,如果arrayList引入一个新元素,那么结果就会大变样这样是不是现实?(比如在你的例子中引入)
A a6 = New A();
a5.title = T5;
a5.content = C2;

那么结果就是所有对象都是一样的了。