Java-集合框架-Collections

1. Collections-sort

  • public static <T extends Comparable<? super T>> void sort(List<T> list) :根据元素的自然顺序对指定列表按升序排序
  • public static <T> void sort(List<T> list, Comparator<? super T> c) :根据指定的比较器引起的顺序对指定的列表进行排序。

给字符串排序: 直接使用Collections.sort()

package Collections;

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

public class CollectionsDemo {
    public static void main(String[] args) {

        sortDemo();
    }

    public static void sortDemo(){
        List<String> list = new ArrayList<>();
        list.add("abcd");
        list.add("aaa");
        list.add("z");
        list.add("kkkkkk");
        list.add("qqqqq");
        list.add("z");

        sop(list);

        
        Collections.sort(list);
        sop(list);
    }

    public static void sop(Object obj){
        System.out.println(obj);
    }
}

结果:

[abcd, aaa, z, kkkkkk, qqqqq, z]
[aaa, abcd, kkkkkk, qqqqq, z, z]

按照字符串长度排序: 使用Collections.sort(list, Comparator)

package Collections;

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

public class CollectionsDemo {
    public static void main(String[] args) {

        sortDemo();
    }

    public static void sortDemo(){
        List<String> list = new ArrayList<>();
        list.add("abcd");
        list.add("aaa");
        list.add("z");
        list.add("kkkkkk");
        list.add("qqqqq");
        list.add("z");

        sop(list);


        Collections.sort(list, new StrLenComparator());
        sop(list);
    }

    public static void sop(Object obj){
        System.out.println(obj);
    }
}

// 字符串长度比较器
class StrLenComparator implements Comparator<String>{

    public int compare(String s1, String s2){
        return s1.length()-s2.length();
    }
}

结果:

[abcd, aaa, z, kkkkkk, qqqqq, z]
[z, z, aaa, abcd, qqqqq, kkkkkk]

2. Collections-max

  • public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll):根据其元素的自然顺序返回给定集合的最大元素
  • public static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp):根据指定的比较器引发的顺序返回给定集合的最大元素
package Collections;

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

public class CollectionsDemo {
    public static void main(String[] args) {

        maxDemo();
    }

    public static void maxDemo(){
        List<String> list = new ArrayList<>();
        list.add("abcd");
        list.add("aaa");
        list.add("z");
        list.add("kkkkkk");
        list.add("qqqqq");
        list.add("z");

        sop("___________初始__________");
        sop(list);
        sop("__________按字符串排序_________");
        Collections.sort(list);
        sop(list);
        sop("__________字符串最大值_________");
        sop(Collections.max(list));
        sop("_________按字符串长度排序________");
        Collections.sort(list,new StrLenComparator());
        sop(list);
        sop("_________字符串长度最大值________");
        sop(Collections.max(list,new StrLenComparator()));
    }

    public static void sop(Object obj){
        System.out.println(obj);
    }
}

// 字符串长度比较器
class StrLenComparator implements Comparator<String>{

    public int compare(String s1, String s2){
        return s1.length()-s2.length();
    }
}

结果:

___________初始__________
[abcd, aaa, z, kkkkkk, qqqqq, z]
__________按字符串排序_________
[aaa, abcd, kkkkkk, qqqqq, z, z]
__________字符串最大值_________
z
_________按字符串长度排序________
[z, z, aaa, abcd, qqqqq, kkkkkk]
_________字符串长度最大值________
kkkkkk

3. Collections-binarySearch

binarySearch()方法提供了多种重载形式,用于满足各种类型数组的查找需要,binarySearch()有两种参数类型
注:此法为二分搜索法,故查询前需要用sort()方法将数组排序,如果数组没有排序,则结果是不确定的,另外如果数组中含有多个指定值的元素,则无法保证找到的是哪一个。

第一种public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key):如果key在数组中,则返回搜索值的索引;否则返回-1或者”-“(插入点)。插入点是索引键将要插入数组的那一点,即第一个大于该键的元素索引。1.不存在时由1开始计数; 2.存在时由0开始计数。

package Collections;

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

public class CollectionsDemo {
    public static void main(String[] args) {

        binarySearchDemo();
    }

    public static void binarySearchDemo(){
        List<String> list = new ArrayList<>();
        list.add("abcd");
        list.add("aaa");
        list.add("z");
        list.add("kkkkkk");
        list.add("qqqqq");
        list.add("z");

        sop("___________初始__________");
        sop(list);
        sop("__________按字符串排序_________");
        Collections.sort(list);
        sop(list);

        sop("__________binarySearch_________");
        int index = Collections.binarySearch(list,"qqqqq");
        sop(index);
        int index = Collections.binarySearch(list,"a");
        sop(index);

    }

    public static void sop(Object obj){
        System.out.println(obj);
    }
}

计算结果:

___________初始__________
[abcd, aaa, z, kkkkkk, qqqqq, z]
__________按字符串排序_________
[aaa, abcd, kkkkkk, qqqqq, z, z]
__________binarySearch_________
3
-1

第二种public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c):使用二叉搜索算法搜索指定对象的指定列表。同时比较的方法也应该带比较器(如sort(List, Comparator)方法)。

package Collections;

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

public class CollectionsDemo {
    public static void main(String[] args) {

        binarySearchDemo();
    }

    public static void binarySearchDemo(){
        List<String> list = new ArrayList<>();
        list.add("abcd");
        list.add("aaa");
        list.add("z");
        list.add("kkkkkk");
        list.add("qqqqq");
        list.add("z");

        sop("___________初始__________");
        sop(list);
        sop("__________按字符串长度排序_________");
        Comparator comparator = new StrLenComparator();
        Collections.sort(list,comparator);
        sop(list);

        sop("__________binarySearch_________");
        int index = Collections.binarySearch(list,"qqqqq",comparator);
        sop(index);

    }

    public static void sop(Object obj){
        System.out.println(obj);
    }
}

// 字符串长度比较器
class StrLenComparator implements Comparator<String>{

    public int compare(String s1, String s2){
        return s1.length()-s2.length();
    }
}

结果:

___________初始__________
[abcd, aaa, z, kkkkkk, qqqqq, z]
__________按字符串长度排序_________
[z, z, aaa, abcd, qqqqq, kkkkkk]
__________binarySearch_________
4

4. Collections-替换反转

fill()
public static <T> void fill(List<? super T> list, T obj):用指定的元素代替指定列表的所有元素。

package Collections;

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

public class CollectionsDemo {
    public static void main(String[] args) {

        fillDemo();
    }

    public static void fillDemo(){
       List<String> list = new ArrayList<>();

        list.add("abcd");
        list.add("aaa");
        list.add("z");
        list.add("kkkkkk");
        list.add("qqqqq");
        list.add("z");

        sop("___________初始__________");
        sop(list);
        sop("__________替换之后_________");
        Collections.fill(list,"pp");
        sop(list);
    }

    public static void sop(Object obj){
        System.out.println(obj);
    }
}


结果:

___________初始__________
[abcd, aaa, z, kkkkkk, qqqqq, z]
__________替换之后_________
[pp, pp, pp, pp, pp, pp]

练习: fill()方法可以将list集合中所有元素替换成指定元素,那如何将list集合中部分元素替换成指定元素呢?
使用list.subList(int start, int end);

package Collections;

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

public class CollectionsDemo {
    public static void main(String[] args) {

        fillDemo();
    }

    public static void fillDemo(){
       List<String> list = new ArrayList<>();

        list.add("abcd");
        list.add("aaa");
        list.add("z");
        list.add("kkkkkk");
        list.add("qqqqq");
        list.add("z");

        sop("___________初始__________");
        sop(list);
        sop("__________替换部分元素_________");
        Collections.fill(list.subList(1,3),"pp");
        sop(list);
    }

    public static void sop(Object obj){
        System.out.println(obj);
    }
}

结果输出:

___________初始__________
[abcd, aaa, z, kkkkkk, qqqqq, z]
__________替换部分元素_________
[abcd, pp, pp, kkkkkk, qqqqq, z]

replaceAll()

public static <T> boolean replaceAll(List<T> list, T oldVal, T newVal) :将列表中一个指定值的所有出现替换为另一个

package Collections;

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

public class CollectionsDemo {
    public static void main(String[] args) {

        replaceAllDemo();
    }

    public static void replaceAllDemo(){
       List<String> list = new ArrayList<>();

        list.add("abcd");
        list.add("aaa");
        list.add("z");
        list.add("kkkkkk");
        list.add("qqqqq");
        list.add("z");

        sop("___________初始__________");
        sop(list);
        sop("__________repalceAll_________");
        Collections.replaceAll(list.subList(1,3),"z","shhhhh");
        sop(list);
    }

    public static void sop(Object obj){
        System.out.println(obj);
    }
}

结果:

___________初始__________
[abcd, aaa, z, kkkkkk, qqqqq, z]
__________repalceAll_________
[abcd, aaa, shhhhh, kkkkkk, qqqqq, z]

reverse()
public static void reverse(List<?> list):反转指定列表中元素的顺序。

package Collections;

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

public class CollectionsDemo {
    public static void main(String[] args) {

        reverseDemo();
    }

    public static void reverseDemo(){
       List<String> list = new ArrayList<>();

        list.add("abcd");
        list.add("aaa");
        list.add("z");
        list.add("kkkkkk");
        list.add("qqqqq");
        list.add("z");

        sop("___________初始__________");
        sop(list);
        sop("__________reverse_________");
        Collections.reverse(list);
        sop(list);
    }

    public static void sop(Object obj){
        System.out.println(obj);
    }
}

结果:

___________初始__________
[abcd, aaa, z, kkkkkk, qqqqq, z]
__________reverse_________
[z, qqqqq, kkkkkk, z, aaa, abcd]

猜你喜欢

转载自blog.csdn.net/lwycc2333/article/details/88974434