zoukankan      html  css  js  c++  java
  • TreeSet

    TreeSet 底层数据结构是二叉树。添加的元素必须进行比较。

    有两种对象比较方式,

    一种是自然排序:即元素具备比较性,实现其comparable接口

    package treeSet;
    
    import java.util.Comparator;
    import java.util.TreeSet;
    
    
    /*按名字的长短排序;
     * */
    public class Student implements Comparable<Student> {
    
    	public String name;
    	public int age;
    
    	public Student() {
    
    	}
    
    	public Student(String name, int age) {
    		this.name = name;
    		this.age = age;
    
    	}
    
    	public String toString() {
    		return "名字: " + name + "	
    年龄: " + age + "	
    --------";
    
    	}
    
    	public int compareTo(Student o) {
    		int num = this.name.length() - o.name.length();
    		// 姓名的长度相同,不代表姓名的内容相同
    		int num2 = num == 0 ? this.name.compareTo(o.name) : num;
    		// 姓名的长度和内容相同,不代表年龄相同,所以还得继续判断年龄
    		int num3 = num2 == 0 ? this.age - o.age : num2;
    		return num3;
    
    	}
     public static void main(String[] args) {
    	 TreeSet<Student> t=new TreeSet<Student>();
    	 t.add(new Student("jacke",20));
    	 t.add(new Student("jack",20));
    	 t.add(new Student("jacken",10));
    	 t.add(new Student("jacke",20));
    	 t.add(new Student("tom",10));
    	
        for(Student s:t){
        	System.out.println(s);
        }
    }
    	
    	
    	
    	
    }
    

      第二种则是比较器排序 实现comparator接口

    package treeSet;
    /*TreeSet 底层结构为二叉树
     * 
     * 
     * 
     * 
     * 
     * 
     * */
    import java.util.Collection;
    import java.util.TreeSet;
    
    public class Studentl  {
    	public String name;
    
    	public int No;
    	public int stu;
    
    	public Studentl() {
    	}
    
    	public Studentl(String name) {
    		this.name = name;
    	}
    
    	public Studentl(String name, int No) {
    		this.name = name;
    		this.No = No;
    	}
    
    	public Studentl(String name, int No, int stu) {
    		this.name = name;
    		this.No = No;
    		this.stu = stu;
    	}
            //重写了toString方法
    	public String toString() {
    		return "名字: " + name + "	
    学号: " + No+"	
    --------";
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public int getNo() {
    		return No;
    	}
    /*	public int compareTo(Studentl o) {
    		/*if (this.No > o.No) {
    			return 1;
    		} else if (this.No < o.No) {
    			return -1;
    		}
    
    		return 0;*/
    	/*	int num = this.No - o.No;
    		// 次要条件
    		// 年龄相同的时候,还得去看姓名是否也相同
    		// 如果年龄和姓名都相同,才是同一个元素
    		int num2 = num == 0 ? this.name.compareTo(o.name) : num;
    		return num2;
    
    	}*/
    
    	public static void main(String[]args){
    		
    		TreeSet<Studentl> t3=new TreeSet<Studentl>(new StudentComparator());
    		//t2.add(new Studentl("a3",12));
    		///t3.add(new Studentl());
    		t3.add(new Studentl("a6",16));
    		t3.add(new Studentl("a7",10));
    		t3.add(new Studentl("a4",14));
    		t3.add(new Studentl("a2",12));
    		t3.add(new Studentl("a1",15));
    		t3.add(new Studentl("a3",19));
    		for(Studentl a:t3){
    			System.out.println(a);
    		}
    		
    		
    	}
    
    }
    

      

    package treeSet;
    
    import java.util.Comparator;
    //比较器比较
    public class StudentComparator implements Comparator<Studentl> {
    
    	
    	public int compare(Studentl o1, Studentl o2) {
    	  // String  o1Name= o1.getName();
    	 //  String  o2Name= o2.getName();
    	  // if(o1.name==null||o2.name==null) throw new NullPointerException();
    	  
    		int num = o1.getNo() - o2.getNo();
    		// 次要条件
    		// 年龄相同的时候,还得去看姓名是否也相同
    		// 如果年龄和姓名都相同,才是同一个元素
    		int num2 = num == 0 ? o1.getName().compareTo(o2.getName()) : num;
    		return num2;
    
    	}
    
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    }
    

      

  • 相关阅读:
    小团队Git协作管理
    android用MediaCodeC将opengl绘制内容录制为一个mp4
    非对称加密算法RSA 学习
    .obj 和 .mtl格式详解
    “m3u8格式简析”与“视频秒开优化”
    Jenkins Android打包(Mac平台)
    java引用Arcface,实现人脸识别(demo)
    ArcFace Demo [Android]
    C# ArcFace 免费人脸识别 2.0 demo
    [Windows][C#][.NET][WPF]基于ArcFace2.0+红外双目摄像头的活体检测
  • 原文地址:https://www.cnblogs.com/ysg520/p/9585603.html
Copyright © 2011-2022 走看看