Java基础之集合框架--Collections工具类之max()方法

时间:2023-02-24 23:20:44

max 方法一个参数的源码:

public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) {
        Iterator<? extends T> i = coll.iterator();
        T candidate = i.next();

        while (i.hasNext()) {
            T next = i.next();
            if (next.compareTo(candidate) > 0)
                candidate = next;
        }
        return candidate;
    }
max 方法两个个参数的源码:
 @SuppressWarnings({"unchecked", "rawtypes"})
    public static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp) {
        if (comp==null)
            return (T)max((Collection) coll);

        Iterator<? extends T> i = coll.iterator();
        T candidate = i.next();

        while (i.hasNext()) {
            T next = i.next();
            if (comp.compare(next, candidate) > 0)
                candidate = next;
        }
        return candidate;
    }


package newFeatures8;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;



/* Collections.max(coll)方法演示 
 * 方法定义:注意:方法的参数是Collection<? extends T>接口,也就是说只要是其子类
 *  public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
 *  我不明白为什么泛型限定里要明写extends Object,哈哈,你牛,你就写一个不是Object子类的试试
 *  根据元素的自然顺序 返回给定 collection 的最大元素。 
 */



public class CollectionsDemo {

	public static void main(String[] args) {
		maxElementDemo();
	}
	/**
	 * @author ljh
	 * @param nothing
	 * @return void
	 * @since 1.2
	 * @description 
	 */
	public static void maxElementDemo(){
		//
		List<String> list=new ArrayList<>();
		list.add("abcd");//String类本身就是实现了Comparable接口
		list.add("kkkkk");
		list.add("z");
		list.add("zz1");
		list.add("zz");
		list.add("qq");
		list.add("qq");
		list.sort(null);//先进行排序 Collections.sort(list);
		System.out.println(list);
		String max=Collections.max(list);//[abcd, kkkkk, qq, qq, z, zz, zz1]
		System.out.println("max="+max);//max=zz1
		
		System.out.println("---------------------");
		//返回指定比较器所定义的最大元素
		max=Collections.max(list,new strLenCompartor());
		System.out.println("maxLength="+max);
		
		/*
		 * 1.8对list 集合新增的方法:
		 * (1:)default void sort(Comparator<? super E> c)
		 * (2:)default void forEach(Consumer<? super T> action)
		 * (3:)default Stream<E> parallelStream()
		 * (4:)default void replaceAll(UnaryOperator<E> operator)
		 * (5:)default boolean removeIf(Predicate<? super E> filter)
		 * (6:)default Spliterator<E> spliterator()
		 * (7:)default Stream<E> stream()
		 */
		
		
	}
	/**
	 * 
	 * @author ljh
	 * @description 静态内部类</br>
	 * 按照字符串的长度进行排序,如果字符串长度相同按按照名称排序
	 */
	static class strLenCompartor implements Comparator<String>{
		@Override
		public int compare(String s1, String s2) {
			 int num=new Integer(s1.length()).compareTo(new Integer(s2.length()));
			 //当主要条件相同一定要按照次要条件排序
			 if (num==0) {
				return s1.compareTo(s2);
			}
			return num;
		}
	}

}