java: Set类及子类:TreeSet有序子类,HashSet无序子类:重复元素

Set类及子类:

TreeSet有序子类;

HashSet无序(散列)子类

HashSet子类的内容是没有顺序的,单个元素也不会重复的(对象除外)。

Set<String> allSet = new HashSet<String>();
		allSet.add("a");
		//重复数据
		allSet.add("b");
		allSet.add("b");
		allSet.add("c");
		allSet.add("d");
		//重复数据
		allSet.add("e");
		allSet.add("e");
		allSet.add("f");
		System.out.println(allSet);

  

TreeSet有序:

TreeSet子类实现了SortSet子类(排序)接口,TreeSet接口是可以排序的。

向TreeSet类中添加自定义对象时,该自定义对象需要复写Comparable接口中的CompareTo排序方法,否则会报:类转换异常

java.lang.ClassCastException

可能需要在复写toString()方法,否则打印的时候报错:

[org.conllection.Person@139a55, org.conllection.Person@1db9742, org.conllection.Person@106d69c]

例如:

添加数据时,有一个自定义类:Person类,2个元素,Name(名字),age(年龄),如果用年龄排序,重复年龄会被剔除掉

person:

public class Person implements Comparable<Person> {

	private String name;
	private int age;	
	
	
	public Person(String name, int age) {		
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return age;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
		
	
	
	@Override
	public String toString() {
		return "姓名:" + name + ", 年龄:" + age + "";
	}

	public int compareTo(Person o) {
		// TODO 自动生成的方法存根
		if(this.age > o.age)
		{
			return 1;
		}else if(this.age < o.age)
		{
			return -1;
		}else{
			return 0;
		}
	}
	
	
}

  

setdemo2:

Set<Person> allSet = new TreeSet<Person>();
		
		allSet.add(new Person("张三",30));
		allSet.add(new Person("李四",30));
		allSet.add(new Person("王五",31));
		allSet.add(new Person("赵六",31));
		allSet.add(new Person("田七",32));
		
		System.out.println(allSet);

  

结果如下:

[姓名:张三, 年龄:30, 姓名:王五, 年龄:31, 姓名:田七, 年龄:32]

  

 

所以,应该在Comparable的CompareTo方法里面在判断name是否重复。

修改后:

public int compareTo(Person o) {
		// TODO 自动生成的方法存根
		if(this.age > o.age)
		{
			return 1;
		}else if(this.age < o.age)
		{
			return -1;
		}else{
			//如果age年龄相同需要在判断name,是否重复
			return this.name.compareTo( o.name );
		}
	}

  

 

结果如下:

[姓名:张三, 年龄:30, 姓名:李四, 年龄:30, 姓名:王五, 年龄:31, 姓名:赵六, 年龄:31, 姓名:田七, 年龄:32]

 

posted @ 2017-09-03 10:56  穆晟铭  阅读(2207)  评论(0编辑  收藏  举报