Java SE 047 Realize your own Comparator and Collections detailed

(1) As long as a person does not give up on himself, the whole world will not give up on you.
(2) I am born to be of great use . (3) If I
cannot bear the suffering of learning, I must bear the suffering of life. How painful it is Deep comprehension.
(4) You must gain from doing difficult things . (
5) Spirit is the real blade.
(6) Conquering opponents twice, the first time in the heart.
(7) Writing is really not easy. If you like it or have something for you Help remember to like + follow or favorite~

Java SE 047 Realize your own Comparator and Collections detailed

1. Realize your own Comparator

1.1 Example 1: Comparison of characters

package com.javase.treeset;

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

public class TreeSetTest3 {
    
    
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
    
    
		TreeSet set = new TreeSet(new MyComparator());
		
		set.add("C");
		set.add("F");
		set.add("A");
		set.add("D");
		set.add("E");
		set.add("B");
		
		for(Iterator iter = set.iterator(); iter.hasNext();){
    
    
			String value = (String)iter.next();
			System.out.println(value);
			
		}
	}
}

@SuppressWarnings("unchecked")
class MyComparator implements Comparator{
    
    

	//如果这个方法返回一个-1代表o1比o2小,对于字符串儿来说就是o1在o2的前面。
	//如果等于0,则o1与o2是相等的。
	//如果>0是正数,则o1>o2
	//实际上是按照升序的方式去考虑的。
	//现在需要实现字符串儿的降序排序可用s2.compareTo(s1);
	@Override
	public int compare(Object o1, Object o2) {
    
    
		//强制转换成放进集合中元素的类型
		String s1 = (String)o1;
		String s2 = (String)o2;
		
		return s2.compareTo(s1);
	}
	
}

package com.javareview.collections;

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

public class TreeSetTest {
    
    
	public static void main(String[] args) {
    
    
		TreeSet<String> set = new TreeSet<String>(new MyComparator());
		
		set.add("C");
		set.add("F");
		set.add("A");
		set.add("D");
		set.add("E");
		set.add("B");
		
		for(Iterator<String> iter = set.iterator(); iter.hasNext();){
    
    
			String value = (String)iter.next();
			System.out.println(value);
		}
	}
}

class MyComparator implements Comparator<String>{
    
    

	@Override
	public int compare(String o1, String o2) {
    
    
		
		return o1.compareTo(o2);
	}	
}

1.2 Example 2: Comparison of integers

package com.javase.treeset;

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

public class TreeSetTest2 {
    
    

	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
    
    
		TreeSet set = new TreeSet(new MyComparator2());
		Person p1 = new Person(10);
		Person p2 = new Person(20);
		Person p3 = new Person(30);
		Person p4 = new Person(40);
		Person p5 = new Person(50);
		
		set.add(p1);
		set.add(p2);
		set.add(p3);
		set.add(p4);
		set.add(p5);
		
		for(Iterator iter = set.iterator(); iter.hasNext();){
    
    
			System.out.println(((Person)iter.next()).score);
		}
	}
	
}

class Person{
    
    
	
	int score;
	
	public Person(int score){
    
    
		this.score = score;
	}
	
	@Override
	public String toString() {
    
    
		return String.valueOf(score);
	}
}

@SuppressWarnings("unchecked")
class MyComparator2 implements Comparator{
    
    
	//比较器接收的参数Object o1与o2是由放进集合中的元素来决定的,此例中放进集合中的元素是Person,则在进行比较时需要将传进集合中的Object强制转换成Person之后然后再进行比较。
	@Override
	public int compare(Object o1, Object o2) {
    
    
		Person p1 = (Person) o1;
		Person p2 = (Person) o2;
		return p1.score - p2.score;
	}
}

2. Collections of auxiliary functions Collections

2.1 Example 1: Reverse sorting of set elements

package com.javase.collections;

import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList;

public class CollectionsTest {
    
    
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
    
    
		LinkedList li = new LinkedList();
		li.add(new Integer(-10));
		li.add(new Integer(15));
		li.add(new Integer(12));
		li.add(new Integer(-5));

		Comparator comparator = Collections.reverseOrder();
		//第一个参数是要排序的集合,第二个参数是排序规则
		Collections.sort(li,comparator);
		
		for(Iterator iter = li.iterator();iter.hasNext();){
    
    
			System.out.println((Integer)iter.next());
		}
	}
}

2.2 Example 2: Shuffle the set (shuffle(List list))

package com.javase.collections;

import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList;

public class CollectionsTest {
    
    
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
    
    
		LinkedList li = new LinkedList();
		li.add(new Integer(-10));
		li.add(new Integer(15));
		li.add(new Integer(12));
		li.add(new Integer(-5));

		Comparator comparator = Collections.reverseOrder();
		//第一个参数是要排序的集合,第二个参数是排序规则
		Collections.sort(li,comparator);
		
		for(Iterator iter = li.iterator();iter.hasNext();){
    
    
			System.out.println((Integer)iter.next());
		}
		
		System.out.println();
		//将集合顺序打乱
		Collections.shuffle(li);
		
		for(Iterator iter = li.iterator();iter.hasNext();){
    
    
			System.out.println((Integer)iter.next());
		}
	}
}

2.3 Example 3: Get the maximum and minimum values ​​in the set

package com.javase.collections;

import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList;

public class CollectionsTest {
    
    
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
    
    
		LinkedList li = new LinkedList();
		li.add(new Integer(-10));
		li.add(new Integer(15));
		li.add(new Integer(12));
		li.add(new Integer(-5));

		Comparator comparator = Collections.reverseOrder();
		//第一个参数是要排序的集合,第二个参数是排序规则
		Collections.sort(li,comparator);
		
		for(Iterator iter = li.iterator();iter.hasNext();){
    
    
			System.out.println((Integer)iter.next());
		}
		
		System.out.println();
		//将集合顺序打乱
		Collections.shuffle(li);
		
		for(Iterator iter = li.iterator();iter.hasNext();){
    
    
			System.out.println((Integer)iter.next());
		}
		
		System.out.println();
		
		System.out.println("min value:"+Collections.min(li));
		System.out.println("max value:"+Collections.max(li));
	}
}

Guess you like

Origin blog.csdn.net/xiogjie_67/article/details/108540847