标签:
Set接口并没有对Collection接口进行扩充,只是比Collection接口要求更加严格了,不能增加重复的元素,并且采用散列的储存方式,所以没有顺序
import java.util.Set; import java.util.HashSet; import java.util.TreeSet; public class Test { public static void main(String[] args) { //Set allSet = new HashSet();//@结果 1 Set allSet = new TreeSet();//@ 结果 2 java.lang.ClassCastException allSet.add(new Person("赵一",21)); allSet.add(new Person("钱二",22)); allSet.add(new Person("孙三",23)); allSet.add(new Person("李四",24)); allSet.add(new Person("周五",25)); allSet.add(new Person("周五",25)); allSet.add("A");allSet.add("A"); System.out.println(allSet); } } class Person { String name; int age; Person(String name,int age) { this.name = name; this.age = age; } public String toString() { return this.name + this.age; } } /* 1.Set添加重复对象,编译期间可以通过,但是添加不了重复对象,对于重复元素只会添加一次。 2.Set集类程序运行时向集合中加入元素的顺序并不是集合中的保存顺序。 3.TreeSet中的元素是有序存放的,TreeSet每个对象所在的类都必须实现Comparable接口才能使用 */
TreeSet类中如果比较器中某个属性没有比较,则会认为是同一个对象。
import java.util.Set; import java.util.HashSet; import java.util.TreeSet; public class Test { public static void main(String[] args) { Set allSet = new TreeSet(); allSet.add(new Person("赵一",21)); allSet.add(new Person("钱二",22)); allSet.add(new Person("孙三",23)); allSet.add(new Person("李四",24)); allSet.add(new Person("周五",25)); allSet.add(new Person("周五",25)); allSet.add(new Person("郑六",25)); System.out.println(allSet); } } class Person implements Comparable<Person> {//? 为什么一定要写Comparable<Person> String name; int age; Person(String name,int age) { this.name = name; this.age = age; } public String toString() { return this.name + this.age; } public int compareTo(Person p) { //对象比较 if (this.age > p.age) { return 100; } if (this.age < p.age) { return -100; } //return 0;//并不能把(郑六,15)添加进去 //名字字符串的比较 return this.name.compareTo(p.name); } } /* 1.TreeSet中的元素是有序存放的,TreeSet每个对象所在的类都必须实现Comparable接口才能使用 2.如果比较器中某个属性没有比较,则会认为是同一个对象。
3.此程序中并没有写equals()和hashCode()方法。全部由compareTo()方法完成。
*/
一个完整的类应该重写equals(),toString(),hashCode()方法
import java.util.Set; import java.util.HashSet; import java.util.TreeSet; public class Test { public static void main(String[] args) { Set allSet = new TreeSet(); allSet.add(new Person("赵一",21)); allSet.add(new Person("钱二",22)); allSet.add(new Person("孙三",23)); allSet.add(new Person("李四",24)); allSet.add(new Person("周五",25)); allSet.add(new Person("周五",25)); allSet.add(new Person("郑六",25)); System.out.println(allSet); } } class Person implements Comparable<Person> { //class Person{ String name; int age; Person(String name,int age) { this.name = name; this.age = age; } public String toString() { return this.name + this.age; } public boolean equals(Object obj) { if (obj instanceof Person) { Person p = (Person)obj; if (this.name.equals(p.name) && this.age == p.age) { return true; } } if (this == obj) { return true; } return false; } public int hashCode() { return this.name.hashCode() * this.age; } public int compareTo(Person p) { //年龄比较 if (this.age > p.age) { return 100; } if (this.age < p.age) { return -100; } //return 0;//并不能把(郑六,15)添加进去 return this.name.compareTo(p.name); } } /* 1.一个完整的类应该重写equals(),toString(),hashCode();方法 */
标签:
原文地址:http://www.cnblogs.com/yhwsy/p/5721895.html