首页 > 其他分享 >第十三章《集合》第6节:使用Collections类操作集合

第十三章《集合》第6节:使用Collections类操作集合

时间:2023-01-02 17:01:55浏览次数:58  
标签:13 nums List list System Collections 第十三章 集合

​Java提供了一个操作集合的工具类Collections,这个类中提供了大量方法对集合元素进行排序、查询和修改等操作,此外还提供了将集合对象设置为不可变、对集合对象实现同步控制等方法。本小节将详细讲解Collections类的使用。

13.6.1使用Collections对集合排序

Collections类中定义了很多对List集合进行排序的方法,如表13-12所示。​

表13-12 Collections类的排序方法​

方法​

功能​

void sort(List<T> list)​

以升序方式对list的元素进行排序​

void sort(List<T> list, Comparator<? super T> c)​

以Comparator定义的规则对list元素进行排序​

void reverse(List<?> list)​

反转list中元素的顺序​

void swap(List<?> list, int i, int j)​

将list中的i处元素和j处元素进行交换​

void shuffle(List<?> list)​

对list中元素进行随机排序(如同洗牌)​

void rotate(List<?> list, int distance)​

当distance为正数时,将list的后distance个元素整体移到前面,当distance为负数时,将list的前distance个元素整体移到后面​

下面的【例13_20】展示了Collections类集合排序方法的效果。​

【例13_20 Collections类的集合排序方法】

Exam13_20.java​

import java.util.*;
public class Exam13_20 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(3);
list.add(5);
list.add(2);
list.add(0);
list.add(1);
System.out.println("list的原始状态:"+list);
//反转list中的元素
Collections.reverse(list);
System.out.println("反转后的list:"+list);
//对list元素进行升序排序
Collections.sort(list);
System.out.println("排序后的list:"+list);
//对list元素随机排序
Collections.shuffle(list);
System.out.println("随机排序后的list:"+list);
}
}

【例13_20】的运行结果如图13-27所示。​

第十三章《集合》第6节:使用Collections类操作集合_Collection

图13-27【例13_20】运行结果​

13.6.2使用Collections查找和替换集合元素

Collections还提供了一些查找和替换集合元素的方法,如表13-13所示。​

表13-13 Collections类查找和替换元素的方法​

方法​

功能​

<T>int binarySearch(List list, T key)​

使用二分搜索法搜索list,以获得key在list中的索引,如果要使该方法可以正常工作,则必须保证list 中的元素已经处于有序状态​

Object max(Collection coll)​

根据元素的自然顺序,返回给定集合中的最大元素​

Object max(Collection coll, Comparator comp)​

根据coll指定的规则,返回给定集合中的最大元素​

Object min(Collection coll)​

根据元素的自然顺序,返回给定集合中的最小元素​

Object min(Collection coll, Comparator comp)​

根据coll指定的规则,返回给定集合中的最小元素​

<T> void fill(List<? super T> list, T obj)​

使用obj替换list中的所有元素​

int frequency(Collection<?> c, Object o)​

返回list中o的出现次数​

int indexOfSubList(List source, List target)​

返回子List对象在父List对象中第一次出现的位置索引,如果没有子List则返回-1​

int lastIndexOfSubList(List source, List target)​

返回子List对象在父List对象中最后一次出现的位置索引,如果没有子List则返回-1​

<T> boolean replaceAll(List<T> list, T oldVal, T newVal)​

使用newVal替换list中的所有oldVal​

下面的【例13_21】展示了如何使用表13-13所列出的方法完成元素的查找和替换​

【例13_21 Collections类查找和替换元素的方法】

Exam13_21.java​

import java.util.*;
public class Exam13_21 {
public static void main(String[] args) {
ArrayList nums = new ArrayList();
nums.add(2);
nums.add(-5);
nums.add(3);
nums.add(0);
System.out.println("nums的原始状态:"+nums);
System.out.println("nums中最大的元素:"+Collections.max (nums));
System.out.println("nums中最小的元素:"+Collections.min (nums));
//把nums中的0全部替换为1
Collections.replaceAll(nums , 0,1);
System.out.println("nums中的0被替换为1:"+nums);
System. out.println("nums中-5出现的次数:"+Collections. frequency(nums ,-5));
//对nums集合排序
Collections.sort (nums);
System.out.println("排序后的nums:"+nums);
System.out.print("排序后nums中元素3的索引:");
System.out.println(Collections.binarySearch (nums , 3));
}
}

【例13_21】的运行结果如图13-28所示。​

第十三章《集合》第6节:使用Collections类操作集合_Collection_02

图13-28【例13_21】运行结果​

13.6.4同步控制

Java语言可以轻松的完成多线程编程。为帮助读者理解线程的概念,此处把线程比喻为一个能够独立完成任务的人,多线程也就是多个人同时完成自己的任务,这些线程在完成自身任务的过程中有可能会操作同一个对象,这样就有可能导致对象的状态出现错误。例如A线程负责向文件中写入“张小明”这个名字,而B线程负责向文件中写入“王佳慧”这个名字,如果A和B同时操作文件,就有可能导致文件中的内容变成“张小王明佳慧”,这样文件的内容就变得“乱七八糟”。为了避免出现这种现象,就必须要求多个线程不能同时操作同一个对象,如果一个对象能够做到不被多个线程同时操作,那么这个对象就是“线程安全”的,线程安全也可以被称为“线程同步”。​

Java集合框架中的HashSet、TreeSet、ArrayList、ArrayDeque、LinkedList、HashMap和TreeMap都是不是线程安全的。如果有多个线程访问它们,而且有超过一个的线程试图修改它们,则存在线程安全的问题。Collections提供了一系列synchronizedXXX()方法,它们可以把它们包装成线程安全的集合,从而可以解决多线程并发访问集合时的线程安全问题。需要说明:这些被包装过的集合实际上是一种新的集合,而这些新的集合都是Collections所定义的静态内部类。下面的【例13_22】展示了如何使用Collections所提供的方法包装集合对象。​

【例13_22 Collections类包装集合的方法】

Exam13_22.java​

import java.util.*;
public class Exam13_22 {
public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
HashSet hashSet = new HashSet(arrayList);
HashMap hashMap = new HashMap();
hashMap.put("张三","13899990000");
hashMap.put("李四","13688887777");
List list = Collections.synchronizedList(arrayList);
Set set = Collections.synchronizedSet(hashSet);
Map map = Collections.synchronizedMap(hashMap);
System.out.println("原版ArrayList:"+arrayList);
System.out.println("被包装过的ArrayList:"+list);
System.out.println("原版HashSet:"+hashSet);
System.out.println("被包装过的HashSet:"+set);
System.out.println("原版HashMap:"+hashMap);
System.out.println("被包装过的HashMap:"+map);
}
}

【例13_22】的运行结果如图13-29所示。​

第十三章《集合》第6节:使用Collections类操作集合_Java_03

图13-29【例13_22】运行结果​

从图13-29可以看出:原版集合和包装版集合的元素是完全相同的,但包装版集合都是线程安全的。

本文字版教程还配有更详细的视频讲解,小伙伴们可以点击这里观看。

标签:13,nums,List,list,System,Collections,第十三章,集合
From: https://blog.51cto.com/mugexuetang/5983846

相关文章

  • 第十三章《集合》第4节:Queue集合
    ​Queue是一个接口,它也是Collection接口的子接口。Queue用来模拟队列这种数据结构。队列这种数据结构最明显的特征是元素先入先出,队列的头部的元素是所有元素中最先进入队列......
  • 第十三章《集合》第2节:List集合
    ​List这个单词意为“列表”,List类型的集合的特点是:元素呈线性排列,致密且有序。下面的图13-3展示了List类型集合的特点。图13-3List类型集合​图13-3中的每一个小圆形代表......
  • 第十三章《集合》第3节:Set集合
    ​Set也是Collection的子接口,它定义了另一种形式的集合,专业上称之为Set集合。Set集合的特点如图13-9所示。图13-9Set类型集合​从图13-9可以看出:Set类型的集合就像是一个装......
  • Java Map 集合类简介
    java.util中的集合类包含Java中某些最常用的类。最常用的集合类是List和Map。List的具体实现包括ArrayList和Vector,它们是可变大小的列表,比较适合构建、存储和......
  • 第十三章《集合》第1节:Java集合概述
    ​实际开发过程中,常常需要集中存放多个数据,虽然程序员可以使用数组来保存多个对象,但数组长度不可变化,一旦在初始化数组时指定了数组长度,这个数组长度就是不可变的,如果需要保......
  • C#.NET 随机排序集合(列表\数组) | 打乱集合(列表\数组)
    直接上代码:///<summary>///重排列表(打乱列表)///</summary>///<paramname="arr"></param>publicstaticList<string>ConfusionArray(List<string>list){......
  • winform控件缩写 (集合)
    winform控件缩写(集合)文章内所有的控件都是博主从网上辛苦整理出来的,希望对大家有用winform控件缩写(一)标准控件winform控件缩写(二)容器控件winform控件缩写(三)菜单和工具栏wi......
  • Python操作Excel、Word、PPT、PDF、复杂文件、通信软件(微信、邮件、飞书、钉钉)、图片
    1、在这几年,我写了本书!很多朋友为了学习如何用Python自动化地处理各种文档,应该都下载过这个文档:python操作excel、word、pdf.pdf。时至今日,仅仅在CSDN一个渠道的下载量便超......
  • Java集合 - HashMap
    介绍HashMapMap是一种存储键值对的集合。Map集合可以根据key快速查找对应的value值。HashMap是Map类型的一中。HashMap的底层存储结构是:数组+链表+红黑树......
  • Java集合 - HashMap
    介绍HashMapMap是一种存储键值对的集合。Map集合可以根据key快速查找对应的value值。HashMap是Map类型的一中。HashMap的底层存储结构是:数组+链表+红黑树......