【Java相关】Java中TreeSet和HashSet的排序和去重
2015-01-29 10:38
330 查看
首先,TreeSet依靠Comparable来排序和去重的。你可以implements Comparable来实现自己的比较函数。
输出结果为:
[[0,0], [0,1], [1,0]]
第二,HashSet是依靠hashCode和equals两个函数共同完成排序和去重的。你可以重载这两个函数来实现自己的hash函数和比较方法。
输出结果为:
[[0,0], [0,1], [1,0], [448557927,448557927], [2147483647,2147483647]]
参考文章:
TreeSet排序和HashSet去重
<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去重
相关文章推荐
- JAVA菜鸟入门(17) 有排序的TreeSet和无排序的HashSet, LinkedHashSet
- java集合Set的应用(HashSet、Tree…
- Java基础第十三天--Set, HashSet, TreeSet
- HashSet、LinkedHashSet、TreeSet+JAVA学习笔记-DAY17
- My_Java之笔记(8)- 实现TreeSet集合的排序方法
- Java容器-引用数据类型排序+TreeSet、TreeMap底层实现
- Java中HashSet和TreeSet集合的本质
- HashSet和TreeSet 分别实现对象的排序操作
- java集合(TreeSet自然排序)
- java--集合框架的Hashset和Treeset
- java:Set对象TreeSet有序子类,HashSet无序子类,重复对象二
- java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)
- Java基础知识强化之集合框架笔记46:Set集合之TreeSet存储自定义对象并遍历练习2(自然排序)
- 浅谈java中的TreeMap 排序与TreeSet 排序
- Java基础之TreeSet集合使用泛型、比较器排序示例:
- 【java编程】Collection类之TreeSet按字符串长度排序
- Java基础知识强化之集合框架笔记44:Set集合之TreeSet保证元素唯一性和自然排序的原理和图解
- Java基础知识强化之集合框架笔记45:Set集合之TreeSet存储自定义对象并遍历练习1(自然排序)
- java中自定义对象排序(TreeSet)
- Java中使用TreeSet对章节序号排序