您的位置:首页 > 编程语言 > Java开发

【Java相关】Java中TreeSet和HashSet的排序和去重

2015-01-29 10:38 330 查看
首先,TreeSet依靠Comparable来排序和去重的。你可以implements Comparable来实现自己的比较函数。

<pre name="code" class="java">import java.util.Set;
import java.util.TreeSet;

public class OwnStruct {
static class IntPair implements Comparable{
int left,right;
public void setPair(int left, int right)
{
this.left = left;
this.right = right;
}
public IntPair(int left, int right)
{
this.setPair(left, right);
}
public IntPair()
{
this.left = 0;
this.right = 0;
}
public String toString()
{
return "["+this.left+","+this.right+"]";
}
@Override
public int compareTo(Object arg0) {
// TODO Auto-generated method stub
IntPair other = (IntPair) arg0;
if(this.left > other.left)
return 1;
else if(this.left < other.left)
return -1;
else if(this.right > other.right)
return 1;
else if(this.right < other.right)
return -1;
else
return 0;
}
}
private Set<IntPair> set = new TreeSet<IntPair>();
public static void main(String[] args)
{
OwnStruct s = new OwnStruct();
s.set.add(new IntPair(0,0));
s.set.add(new IntPair(0,0));
s.set.add(new IntPair(0,1));
s.set.add(new IntPair(0,1));
s.set.add(new IntPair(1,0));
System.out.print(s.set);
}
}




输出结果为:

[[0,0], [0,1], [1,0]]

第二,HashSet是依靠hashCode和equals两个函数共同完成排序和去重的。你可以重载这两个函数来实现自己的hash函数和比较方法。

import java.util.HashSet;
import java.util.Set;

public class MyStruct {
static class IntPair {
int left,right;
public void setPair(int left, int right)
{
this.left = left;
this.right = right;
}
public IntPair(int left, int right)
{
this.setPair(left, right);
}
public IntPair()
{
this.left = 0;
this.right = 0;
}
@Override
public String toString()
{
return "["+this.left+","+this.right+"]";
}
@Override
public int hashCode()
{
return left * 157 + right;
}
@Override
public boolean equals(Object o)
{
if (o instanceof IntPair)
{
IntPair r = (IntPair) o;
return r.left == this.left && r.right == this.right;
}
else
{
return false;
}
}
}
private Set<IntPair> set = new HashSet<IntPair>();
public static void main(String[] args)
{
MyStruct s = new MyStruct();
s.set.add(new IntPair(0,0));
s.set.add(new IntPair(0,0));
s.set.add(new IntPair(0,1));
s.set.add(new IntPair(0,1));
s.set.add(new IntPair(1,0));
s.set.add(new IntPair(448557927,448557927));
s.set.add(new IntPair(448557927,448557927));
s.set.add(new IntPair(Integer.MAX_VALUE,Integer.MAX_VALUE));
s.set.add(new IntPair(Integer.MAX_VALUE,Integer.MAX_VALUE));
System.out.print(s.set);
}
}


输出结果为:

[[0,0], [0,1], [1,0], [448557927,448557927], [2147483647,2147483647]]

参考文章:

TreeSet排序和HashSet去重
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: