JAVA ------コレクションのTreeSet

TreeSetコレクションの機能

  1. 要素は順序付けられています。ここでの順序は、保存と取得の順序ではなく、特定のルールに従って並べ替えられます。具体的な並べ替え方法は、構築方法によって異なります。

  2. TreeSet():要素の自然な順序に従って並べ替えます

  3. TreeSet(コンパレータコンパレータ):指定されたコンパレータに従ってソートします

  4. インデックス付きのメソッドがないため、通常のforループを使用してトラバースすることはできません

  5. Setコレクションであるため、繰り返される要素のコレクションは含まれていません。


コードの一部を見てください:

package Set;

import java.util.TreeSet;

public class TreeSetDemo01 {
    
    
	public static void main(String[] args) {
    
    
		
		//集合创建要使用引用,即包装类
		TreeSet<Integer> ts=new TreeSet<>();
		//自然排序	
		ts.add(20);
		ts.add(40);
		ts.add(30);
		ts.add(10);
		ts.add(30);
		
		for(Integer i:ts) {
    
    //输出10 20 30 40
			System.out.println(i);
		}
	}
}

セットに20、40、30、10、30を追加し、最後に10 20 30 40を出力し、自然な順序で出力します。


自然順

ケースを見てみましょう:

学生のオブジェクトを保存してトラバースし、引数なしの構築方法を使用してコレクションを作成します
要件:若いものから古いものへと年齢で並べ替えます。年齢が同じ場合は、名前のアルファベット順に並べ替えます。

まず、学生クラスを作成します。

package Set;

public class student implements Comparable<student>{
    
    
	private String name;
	private int age;
	
	//构造方法
	public student() {
    
    
		System.out.println("无参构造");
	}
	
	public student(String name,int age) {
    
    
		this.name=name;
		this.age=age;
	}
	
	//提供get/set方法
	public void setAge(int age) {
    
    
		if(age<0||age>100)
		{
    
    
			System.out.println("年龄有误");
		}else {
    
    
			this.age=age;
		}
		
	}
	
	public int getAge() {
    
    
		return age;
	}
	
	public void setName(String name) {
    
    
		this.name=name;
	}
	
	public String getName() {
    
    
		return name;
	}
	
	public void show() {
    
    
		System.out.println(name+","+age);
	}

	@Override
	public int compareTo(student s) {
    
    
		//return 0;//重复元素,不添加
		//return 1;//按照输入升序排序
		//return -1;//按照输入逆序排序
		int num=this.age-s.age;//年龄升序 this为s2,s为s1
		//int num=s.age-this.age;//降序
		
		int num2=num==0?this.name.compareTo(s.name):num;
		return num2;
	}
	
}

自然な順序付けとは、要素が属するクラスがComparableインターフェイスを実装し、compareTo(To)メソッドをオーバーライドすることを意味します。

  • 0を返します; //要素を繰り返します。追加しないでください
  • 1を返します; //入力の昇順で並べ替えます
  • -1を返します; //入力の逆順に従ってソートします

次のコード行は、2人が同じ年齢であるかどうかを判断し、名前を比較します。これは、StringがcompareToの書き直しであるため、直接使用できるためです。

int num2=num==0?this.name.compareTo(s.name):num;
@Override
	public int compareTo(student s) {
    
    
		//return 0;//重复元素,不添加
		//return 1;//按照输入升序排序
		//return -1;//按照输入逆序排序
		int num=this.age-s.age;//年龄升序 this为s2,s为s1
		//int num=s.age-this.age;//降序
		
		int num2=num==0?this.name.compareTo(s.name):num;
		return num2;
	}

メイン:

package Set;

import java.util.TreeSet;

public class TreeSetDemo02 {
    
    
	
public static void main(String[] args) {
    
    
		
		//集合创建要使用引用,即包装类
		TreeSet<student> ts=new TreeSet<>();
		
		student s1=new student("小李",20);
		student s2=new student("小李",50);
		student s3=new student("小张",35);
		student s4=new student("小王",18);
		student s5=new student("小康",35);
		
		ts.add(s1);
		ts.add(s2);
		ts.add(s3);
		ts.add(s4);
		ts.add(s5);
		
		for(student s:ts) {
    
    
			System.out.println(s.getName()+","+s.getAge());
		}
	}		
}


指定されたコンパレータソート

ケースを直接見てください:

学生のオブジェクトを保存してトラバースし、パラメータを使用して構築方法を使用してコレクションを作成します
*要件:年齢が若いものから古いものへと並べ替え、年齢が同じ場合は、名前のアルファベット順に並べ替えます

コンパレータのソートに応じて、クラスにComparatorインターフェイスを実装する必要があります。
ここでは、匿名内部クラスを直接使用してComparatorインターフェイスを実装します。


学生カテゴリー:

package Set;

public class student03{
    
    
	private String name;
	private int age;
	
	//构造方法
	public student03() {
    
    
		System.out.println("无参构造");
	}
	
	public student03(String name,int age) {
    
    
		this.name=name;
		this.age=age;
	}
	
	//提供get/set方法
	public void setAge(int age) {
    
    
		if(age<0||age>100)
		{
    
    
			System.out.println("年龄有误");
		}else {
    
    
			this.age=age;
		}
		
	}
	
	public int getAge() {
    
    
		return age;
	}
	
	public void setName(String name) {
    
    
		this.name=name;
	}
	
	public String getName() {
    
    
		return name;
	}
	
	public void show() {
    
    
		System.out.println(name+","+age);
	}
	
}

メイン:

package Set;

import java.util.Comparator;
import java.util.TreeSet;

public class TreeSetDemo03 {
    
    


public static void main(String[] args) {
    
    
			
		TreeSet<student03> ts=new TreeSet<student03>(new Comparator<student03>() {
    
    
			@Override
			public int compare(student03 s1,student03 s2) {
    
    //匿名内部类实现Comparator接口
				//this.age-s.age
				//s1  s2
				int num=s1.getAge()-s2.getAge();
				int num2=num==0?s1.getName().compareTo(s2.getName()):num;
				return num2;
			}		
		});
	
		student03 s1=new student03("小李",20);
		student03 s2=new student03("小李",50);
		student03 s3=new student03("小张",35);
		student03 s4=new student03("小王",18);
		student03 s5=new student03("小康",35);
		
		ts.add(s1);
		ts.add(s2);
		ts.add(s3);
		ts.add(s4);
		ts.add(s5);
		
		for(student03 s:ts) {
    
    
			System.out.println(s.getName()+","+s.getAge());
		}
	}		
}

おすすめ

転載: blog.csdn.net/weixin_45102820/article/details/113527294