标签:tor 存储 stat hashcode extend equals new bsp lis
由于判断元素是否存在的依据是hashCode和equals方法,所以我们在使用时通常重写类的这两个方法,来达到自定义对象比较规则的目的。
该比较只实现判断两个对象是否相同,从而达到存放不重复的效果,并无排序功能。
/** * 重写hashCode方法 */ @Override public int hashCode() { return ID; } /** * 重写equals方法,必须在执行hashCode方法得到相同哈希值之后才进入该方法 */ @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (ID != other.ID) return false; return true; }
方法1:
HashSet<String> s2 = new HashSet<String>(s1);
方法2:
HashSet<String> s2 = new HashSet<String>(); s2.addAll(s1);
方法3:
HashSet<String> s2 = new HashSet<String>(); for (String string : s1) { s2.add(string); }
TreeSet使用元素的自然顺序对元素进行排序,或者根据创建set时提供的Comparator进行排序。
TreeSet(Collection<? extends E> c)
构造一个包含指定 collection 元素的新 TreeSet,它按照其元素的自然顺序进行排序。
TreeSet(Comparator<? super E> comparator)
构造一个新的空 TreeSet,它根据指定比较器进行排序。该比较器为实现了Comparator接口的类的实体对象。
TreeSet使用的元素的自然顺序由元素自己提供比较规则。
通常这个比较规则有两种实现方法:
public class Student implements Comparable<Student>{
...
/** * 重写Comparable接口的compareTo方法,将o的name属性与本对象的name属性对比 */ @Override public int compareTo(Student o) { return name.compareTo(o.name); }
}
public class MyComparator implements Comparator<Student>{ @Override public int compare(Student o1, Student o2) { return o1.getAge() - o2.getAge(); } }
HashSet<Student> stuList = new HashSet<Student>(new MyComparator());
代码实现:
public static void main(String[] args) { //实例化TreeSet,并通过匿名类传入比较器 TreeSet<String> tSet = new TreeSet<String>(new Comparator<String>() { @Override public int compare(String o1, String o2) { return o2.length() - o1.length(); } } ); tSet.add("asd"); tSet.add("asd1"); tSet.add("asd111"); tSet.add("asd11"); System.out.println(tSet); }
打印结果:
[asd111, asd11, asd1, asd]
标签:tor 存储 stat hashcode extend equals new bsp lis
原文地址:https://www.cnblogs.com/JuanF/p/9326776.html