zoukankan      html  css  js  c++  java
  • TreeSet

    /*
    Set:无序,不可重复
    HashSet:数据结构式哈希表,线程非同步。保证元素唯一性的原理,判断hashCode是否相同,如果相同,判断元素的equals方法。
    TreeSet:可以对集合中的元素进行排序,底层数据结构是二叉树,保证元素唯一性的依据:compareTo方法的return 0.
    TreeSet的排序方法:
    1、方法一:让元素自身具有比较性。元素需要实现Comparable接口,重写compareTo方法,这种方式也是元素的自然顺序,叫做默认排序
    2、方法二:当元素不具备比较性,或者具备的比较性不是需要的,这时,要让集合自身具有比较性。在集合初始化时就具有比较性。在TreeSet初始化时,
    			定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。
    	当两种排序都存在时,以比较器为主
    	步骤:
    	定义一个类,实现Comparator接口,重写compare方法,以return 0判断是否相同。
    	ClassCastException - 如果参数的类型不允许此 Comparator 对它们进行比较。
    */
    import java.util.*;
    class  TreeSetDemo
    {
    	public static void main(String[] args) 
    	{
    		System.out.println("实现Comparable");
    		TreeSet ts = new TreeSet();
    		ts.add(new Student("java1",106));
    		ts.add(new Student("java2",102));
    		ts.add(new Student("java3",103));
    		ts.add(new Student("java4",104));
    		Iterator it = ts.iterator();
    		while(it.hasNext())
    		{
    			Student stu = (Student)it.next();
    			System.out.println(stu.getName() + "..." + stu.getAge());
    		}
    
    		System.out.println("实现Comparator");
    		TreeSet ts1 = new TreeSet(new Person());
    		ts1.add(new Person("java1",106));
    		ts1.add(new Person("java2",102));
    		ts1.add(new Person("java3",103));
    		ts1.add(new Person("java4",104));
    		Iterator it1 = ts1.iterator();
    		while(it1.hasNext())
    		{
    			Person per = (Person)it1.next();
    			System.out.println(per.getName() + "..." + per.getAge());
    		}
    	}
    }
    
    class Student implements Comparable
    {
    	private String name;
    	private int age;
    	Student(String name,int age)
    	{
    		this.name = name;
    		this.age = age;
    	}
    
    	public String getName()
    	{
    		return this.name;
    	}
    	public int getAge()
    	{
    		return this.age;
    	}
    	
    	public int compareTo(Object obj1)				//当主要条件相同时,进行次要条件判断,如果只有一个条件,那么相同就是两个对象相同,添加不成功													//导致添加不成功
    	{
    		if(!(obj1 instanceof Student))
    			return -1;
    		Student stu1 = (Student)obj1;
    		if(stu1.age < this.age)
    		{
    			return -1;
    		}
    		if(this.age == stu1.age)
    			return 0;
    		return 1;
    	}
    }
    
    class Person implements Comparator				//根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
    {
    	private String name;
    	private int age;
    	Person()
    	{
    	}
    	Person(String name,int age)
    	{
    		this.name = name;
    		this.age = age;
    	}
    
    	public String getName()
    	{
    		return this.name;
    	}
    	public int getAge()
    	{
    		return this.age;
    	}
    	
    	public int compare(Object obj1,Object obj2)
    	{
    		Person p1 =(Person)obj1;
    		Person p2 =(Person)obj2;
    		if(p2.age > p1.age)
    		{
    			return 1;
    		}
    
    		if(p2.age == p1.age)
    		{
    			return 0;
    		}
    
    		return -1;
    	}
    }

  • 相关阅读:
    【SICP练习】150 练习4.6
    windows已安装solr
    ps快速删除圆角图片旁白的白色区域方法
    junit学习笔记(二):hamcrest和TestSuit
    取球游戏
    【Linux操作系统分析】设备驱动处理流程
    POJ Secret Milking Machine 【网络流+二分】
    oracle 10 g 需要启动的2个服务
    jQuery也能舞出绚丽的界面(完结篇)
    HDU 2665(Kth number-区间第k大[内存限制+重数])
  • 原文地址:https://www.cnblogs.com/dengshiwei/p/4258500.html
Copyright © 2011-2022 走看看