Java学习·Set

Set:无序,不可以重复元素
|--HashSet: 数据结构是哈希表,线程是非同步的
保证元素唯一性的原理,判断元素的hashCode值是否相同
如果相同,还会就行判断元素的equals方法,是否为true


|--TreeSet:可以对Set集合中的元素进行排序
底层数据结构是二叉树
保证元素唯一性的依据
compareTo方法return 0.


TreeSet排序的第一种方式,让元素自身具备比较性
元素需要实现Coparable接口,覆盖compareTo方法
这种方式也称为元素的自然顺序,或者叫做默认排序


TreeSet的第二种排序方式
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。


当两种排序都存在时以比较器为主。
定义一个类,实现Comparator接口,覆盖compare方法。

<span style="font-size:14px;">import java.util.*;
//import java.lang.*;
class Student1 implements Comparable//该接口强制让学生具备比较性
{
	private String name;
	private int age;
	Student1 (String name,int age)
	{
		this.name=name;
		this.age=age;
	}
	public  String getName()
	{
		return name;
	}
	public int getAge()
	{
		return age;
	}
	public int compareTo(Object obj)
	{
		if(!(obj instanceof Student1))
			throw new RuntimeException("不是学生对象");
		Student1 s=(Student1)obj;
		if(this.age>s.age)
			return 1;
		if(this.age==s.age)
		{
			return this.name.compareTo(s.name);
		}
		 return -1;
	}
	
	
}
class MyCompare implements Comparator
{
	public int compare(Object o1,Object o2)
	{
		Student1 s1=(Student1)o1;
		Student1 s2=(Student1)o2;
		//int num= s1.getName().compareTo(s2.getName());
		//if(num==0)
		//{
			return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
			/*if(s1.getAge()>s2.getAge())
				return 1;
			if(s1.getAge()==s2.getAge())
				return 0;
			return -1;*/
		//}
	}
}
public class TreeSetDemo {
	public static void main(String[] args)
	{
		TreeSet ts=new TreeSet(new MyCompare());
		ts.add(new Student1("lisi",19));
		ts.add(new Student1("wangwu",18));
		ts.add(new Student1("zhangsan",20));
		ts.add(new Student1("zhaoi",19));
		Iterator it=ts.iterator();
		while(it.hasNext())
		{
			Student1 stu=(Student1)it.next();
			System.out.println(stu.getName()+stu.getAge());
		}
	}
}
</span>


你可能感兴趣的:(Java学习·Set)