|
|
|
|
|
|
g*******s 发帖数: 2963 | 1 一个简单的class只包含多个不同类型的data member。比如:
class Data
{ int a; float b, string c};
一个数组或list包含很多个class Data的object,如何删除duplicate (就是 啊所有
member都相同)。
我回答了用hashtable和分层sort,比如先sort by a,然后在duplicated a 里sort by
b.......
被告知还有很多更好的方法~ | n*******r 发帖数: 22 | 2 这样行不 - 如果是C#或者是Java,可以override这个类的GetHashCode()函数(或者类
似的函数),让两个object只有在所有member都相同时hashcode才相同。
然后再用hashtable一个一个的存每个object的hashcode,如果已经在hashtable中,就
把当前的
object从list中删除。
如果是C++,可以用类似的方法。
by
【在 g*******s 的大作中提到】 : 一个简单的class只包含多个不同类型的data member。比如: : class Data : { int a; float b, string c}; : 一个数组或list包含很多个class Data的object,如何删除duplicate (就是 啊所有 : member都相同)。 : 我回答了用hashtable和分层sort,比如先sort by a,然后在duplicated a 里sort by : b....... : 被告知还有很多更好的方法~
| f*********i 发帖数: 197 | 3 我测试了一下,好像不行啊
我自己写了一个类
static class Mix{
private int a; double b; String c;
Mix(int a,double d,String c){
this.a=a;this.b=d;this.c=c;
}
public int hashCode(){
return 1;
}
}
在main函数中,我创建了两个一样的实例,但是hashtable认为他们是不一致的,我已
经重载了这个类的hashCode这个函数了啊。
public static void main(String[] args)
Mix m1 = new Mix(1,0.53,"yes");
Mix m2 = new Mix(1,0.52,"yes");
System.out.println(m1.hashCode());
System.out.println(m2.hashCode());
Hashtablehash = new Hashtable();
hash.put(m1, m1.hashCode());
if(hash.get(m2)!=null)
System.out.println("found");
else
System.out.println("not found");
System.out.println(hash.get(m1));
}
输出
1
1
not found
1 | f*********i 发帖数: 197 | 4 后来想了一下,hash的思路应该是对的,能不能自己建立一个hash index呢
比如例子中class,完全可以对每一个类生成一个correspond String St
St = ""+a+b+c;
然后对这个st做hash | b*******8 发帖数: 37364 | 5 先序列化(方法很多),然后不管哈希还是排序啥的都行。 | g**e 发帖数: 6127 | 6 override hashCode() method
public int hashCode() {
int h = a;
h = h*37 + Float.floatToIntBits(b);
h = h*37 + c.hashCode();
return h;
}
if you need to implement explicitly string hash code function, use this
method:
string_hash = s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
by
【在 g*******s 的大作中提到】 : 一个简单的class只包含多个不同类型的data member。比如: : class Data : { int a; float b, string c}; : 一个数组或list包含很多个class Data的object,如何删除duplicate (就是 啊所有 : member都相同)。 : 我回答了用hashtable和分层sort,比如先sort by a,然后在duplicated a 里sort by : b....... : 被告知还有很多更好的方法~
|
|
|
|
|
|
|