Java的集合工具类及总结

本文详细介绍Java集合框架中的List、Set和Map接口及其实现类,并通过示例代码展示Collections工具类的功能,包括排序、查找和替换操作及同步控制方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java提供了一个操作Set、List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象实现同步控制等方法。这个类不需要创建对象,内部提供的都是静态方法。
一、排序操作
在这里插入图片描述
示例代码:

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

public class SortDemo {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<>();
		list.add(1);
		list.add(2);
		list.add(3);
		list.add(4);
		list.add(5);		
		System.out.println(list);
		System.out.println("‐‐‐‐倒序 reverse‐‐‐");
		Collections.reverse(list);// 倒序 5,4,3,2,1,
		System.out.println(list);
		System.out.println("‐‐‐随机顺序 shuffle‐‐‐");
		Collections.shuffle(list);// 每次执行后的顺序都是随机排列的
		System.out.println(list);
		System.out.println("‐‐‐自然顺序排序 sort‐‐‐");
		Collections.sort(list);// 自然顺序排序
		System.out.println(list);
		System.out.println("‐‐‐自定义排序 sort‐‐‐");
		Collections.sort(list, new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
				// 从大到小
				return o2 - 21;
			}
		});
		System.out.println(list);
		System.out.println("‐‐‐交换元素 swap‐‐‐");
		Collections.swap(list, 0, 4);//索引从0开始,交换的是元素索引
		System.out.println(list);
		System.out.println("‐‐‐自然顺序排序 sort‐‐‐");
		Collections.sort(list);// 自然顺序排序
		System.out.println(list);
		System.out.println("‐‐‐rotate(2)//正数往后移动,若负数往前移动‐‐‐");
		Collections.rotate(list, 2);
		System.out.println(list);		
	}
}

结果截图:
在这里插入图片描述

二、查找和替换操作
在这里插入图片描述
示例代码:

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

public class SearchDemo {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<>();
		list.add(5);		
		list.add(-3);	
		list.add(-1);		
		list.add(0);
		System.out.println(list);
		System.out.println("=====max输出最大元素=====");
		System.out.println(Collections.max(list));
		System.out.println("=====min输出最小元素=====");
		System.out.println(Collections.min(list));
		System.out.println("=====replaceAll将集合中的0使用1来代替=====");
		Collections.replaceAll(list , 0 , 1);
		System.out.println(list);
		System.out.println("=====frequency判断5在List集合中出现的次数=====");
		System.out.println(Collections.frequency(list , 5));
		System.out.println("=====sort对集合排序,从小到大=====");
		Collections.sort(list);
		System.out.println(list);
		System.out.println("===binarySearch返回指定元素的索引,只有排序后的集合才可用二分法===");
		System.out.println(Collections.binarySearch(list , 5));
		List<Integer> list2=new ArrayList<>();
		list2.add(-1);
		list2.add(1);
		System.out.println("===indexOfSubList查找子列表在列表中第一次出现的位置,没有返回‐1===");
		System.out.println(Collections.indexOfSubList(list, list2));
		System.out.println("===lastIndexOfSubList查找子列表在列表中最后一次出现的位置,没有返回‐1===");
		System.out.println(Collections.lastIndexOfSubList(list , list2));
		System.out.println("===fill用8填充list===");
		Collections.fill(list, 8);
		System.out.println(list);
	}
}

结果截图:
在这里插入图片描述
三、同步控制
Collections类中提供了多个 synchronized…()方法,这些方法可以将指定集合包装成线 程同步(线程安全)的集合,从而可以解决多线程并发访问集合时的线程安全问题。
Java中常用的集合框架中的实现类 ArrayList、Linkedlist、 HashSet、TreeSet、 HashMap和TreeMap都是线程不安全的。如果有多个线程访问它们,而且有超过一个的线程试图修改它们,则存在线程安全的问题。 Collections提供了多个类方法可以把它们包装成线程同步的集合。
示例代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class SynchronizedDemo {
	public static void main(String[] args) {
		List<String> list=Collections.synchronizedList(new ArrayList<String>());
		Set<String> set=Collections.synchronizedSet(new HashSet<String>());
		Map<Integer, String> map=Collections.synchronizedMap(new HashMap<Integer, String>());
	}
}

Java集合总结
1、List,Set,Map是集合体系中最主要的三个接口。 其中list和set是继承自collection接口;Map也属于集合系统但是与collection接口不同;list是有序且允许元素重复,允许元素为null,ArrayList、LinkedList和Vector是三个主要的实现类 (1)、Vector、ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的形式进行存储。 (2)、Vector线程安全的(同步),ArrayList、LinkedList线程不安全的(不同步)。 (3)、ArrayList、Vector适合查找,不适合指定位置的插入、删除操作; LinkedList适合指定位置插入、删除操作,不适合查找。 (4)、ArrayList在元素填满容器时会自动扩充容器大小的50%,而Vector则是 100%,因此ArrayList更节省空间。
2、set是无序,不允许元素重复;HashSet和TreeSet是两个实现类
(1)、HashSet基于HashMap实现,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的。(2)、TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值。
3、Comparator和 Comparable的区别:
Comparator定义在类的外部,此时我们的类的结构不需要有任何变化,从小到大:o1-¬o2 从大到小:o2-¬o1。
Comparable定义在类的内部,耦合性较强;从小到大:this-¬o 从大到小:o¬-this。
PS:为了线程安全而提出,线程安全的就是同步的,不安全的就是不同步的,不同步的运行速度要比同步的快。
4、Collection 和 Collections的区别:
Collections是java.util下的类,是针对集合类的一个工具类,提供一系列静态方法,实现对集合的查找、排序、替换、线程安全化(将非同步的集合转换成同步的)等操作。
Collection是java.util下的接口,它是各种集合结构的父接口,继承于它的接口主要有Set和List,提供了关于集合的一些操作,如插入、删除、判断一个元素是否其成员、遍历等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值