Java基础-集合的Collections工具类

Collections概述

Colllections是一个操作Set,List,Map等集合的工具类,提供了排序、查找、替换、同步控制、设置不可变集合(JAVA9开始)等方法

常用方法

排序

  • void reverse(List<?> list):反转指定列表中元素的顺序。
  • void shuffle(List<?> list):对指定列表中的元素进行随机排序
  • void sort(List list):对指定列表进行自然排序
  • void sort(List list,Comparator c):对指定列表进行自定义排序
  • void swap(List list,int i,int j):将指定列表中i位置的元素和j位置的元素调换
  • void rotate(List list,int distance):按指定距离旋转指定列表中的元素。
import java.util.*;

/**
 * 2021/12/23 21:55
 *  * @author 小豪的小目标
 * @version 1.0
 */
public class SortTest {
    public static void main(String[] args) {

        //定义一个List
        List<String> list = new ArrayList<>();
        list.add("第一个元素");
        list.add("第二个元素");
        list.add("第三个元素");
        System.out.println(list);//[第一个元素, 第二个元素, 第三个元素]

        Collections.reverse(list);//反转list列表中元素的顺序
        System.out.println(list);//[第三个元素, 第二个元素, 第一个元素]

        Collections.shuffle(list);//随机排序
        System.out.println(list);//[第三个元素, 第二个元素, 第一个元素]

        Collections.sort(list);//根据元素的自然顺序对指定 List 集合的元素按升序进行排序
        System.out.println((int)'一');//19968
        System.out.println((int)'二');//20108
        System.out.println((int)'三');//19977
        System.out.println(list);//[第一个元素, 第三个元素, 第二个元素]
        //通过上述程序可以看到他们根据从小到大排序

        Collections.sort(list, new Comparator<String>() {
            /*
            * compare中返回值为0或负数,则比较的两个数不调整顺序,如果为负数,则调整顺序
            * */
            @Override
            public int compare(String o1, String o2) {
                return o1.hashCode()-o2.hashCode();
            }
        });
        System.out.println(list); //输出[第一个元素, 第三个元素, 第二个元素]
        Collections.swap(list,2,1);//调换list中索引2元素和索引1元素的位置
        System.out.println(list); //[第一个元素, 第二个元素, 第三个元素]

        Collections.rotate(list,2);//按指定距离旋转指定列表中的元素
        System.out.println(list);
    }
}

查询、替换

  • int binarySearch(List list,Object key):使用二进制搜索算法在指定列表中搜索指定对象。必须要保证list处于有序的状态
  • Object max(Collection coll):返回集合中自然排序最大的值
  • Object max(Collection coll,Comparator comp):返回指定Comparator排序规则中最小的值
  • Object min(Collection coll):返回集合中自然排序最小的值
  • Object min(Collection coll,Comparator comp):返回指定Comparator排序规则中最小的值
  • void fill(List list,Object obj):使用obj替换list中的所有元素
  • int frequency(Collection c,Object obj):返回obj在集合中出现的总次数
  • int indexOfSubList(List source,List target):返回target在source中第一次出现的索引
  • int lastIndexOfSubList(List source,List target):返回target在source中最后一次出现的索引
  • boolean replaceAll(List list,Object oldVal,Object newVal):用newVal替换list中的所有oldVal元素
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

/**
 * 2021/12/24 10:57
 *
 * @author 小豪的小目标
 * @version 1.0
 */
public class Search {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("a1");
        list.add("b2");
        list.add("c3");
        list.add("a1");
        list.add("d3");
        System.out.println(list);
        System.out.println(Collections.binarySearch(list,"a1")); //0

        System.out.println(Collections.max(list));//d3
        System.out.println(Collections.max(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.hashCode()-o2.hashCode();
            }
        })); //d3
        System.out.println(Collections.min(list));//a1
        System.out.println(Collections.min(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.hashCode()-o2.hashCode();
            }
        }));//

        ArrayList list2 = new ArrayList();
        list2.add("A1");
        list2.add("B2");
        Collections.fill(list2,"C3");
        System.out.println(list2);//[C3, C3]

        System.out.println(Collections.frequency(list,"a1"));//2

        ArrayList list3 = new ArrayList();
        list3.add("a1");
        System.out.println(Collections.indexOfSubList(list,list3));//0
        System.out.println(Collections.lastIndexOfSubList(list,list3));//3
        list3.add("a1");
        System.out.println(Collections.indexOfSubList(list,list3));//-1
        System.out.println(Collections.lastIndexOfSubList(list,list3));//-1

        Collections.replaceAll(list,"a1","A1");
        System.out.println(list);//[A1, b2, c3, A1, d3]
    }
}

同步控制

synchronizedCollection
synchronizedSet
synchronizedHash
synchronizedMap
其它的类似方法可以查看手册了解。
通过上述方法即可完成集合的线程安全实现。但是由于以上方法的效率较低。我们定义集合时一般使用

  • ConcurrentHashMap
  • ConcurrentLinkedDeque
  • ConcurrentLinkedQueue
  • ConcurrentMap
  • ConcurrentNavigableMap
  • ConcurrentSkipListMap
  • ConcurrentSkipListSet
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 2021/12/24 15:29
 *
 * @author 小豪的小目标
 * @version 1.0
 */
public class SynchronizedTest {
    public static void main(String[] args) {
        Collection c1 = Collections.synchronizedCollection(new ArrayList());
        List c2 = Collections.synchronizedList(new ArrayList());
        Set c3 = Collections.synchronizedSet(new HashSet());
        Map c4 = Collections.synchronizedMap(new HashMap());
        ConcurrentHashMap chm = new ConcurrentHashMap();
    }
}

设置不可变集合

emptyXxx():返回一个空的不可变集合
singletonXxx(值或键,值):返回一个只包含一个值的集合
unmodifiableXxx(Collection):返回指定对象不得不可变集合

/**
 * 2021/12/24 15:44
 *
 * @author 小豪的小目标
 * @version 1.0
 */
public class ImmutableTest {
    public static void main(String[] args) {
        Collection<Object> list = Collections.emptyList();
        //list.add("a");//运行报错UnsupportedOperationException
        Collection<Object> list2 = Collections.singletonList("集合");
        //list2.add("集合2");//运行报错UnsupportedOperationException
        System.out.println(list2);
        ArrayList list4 = new ArrayList();
        list4.add("4-元素1");
        list4.add("4-元素2");
        List list3 = Collections.unmodifiableList(list4);
        //list3.add("3-元素1");//运行报错UnsupportedOperationException
        System.out.println(list3);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值