Java学习笔记之集合(十):集合工具类Collections的用法

package com.collection.map;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
 
import org.junit.Test;
 
/*
集合的工具类:Collections
	问题:Collection 与 Collections 的区别:
	Collection是单列集合的根接口;Collections是操作集合对象的一个工具类;
Collections常用方法:
		
	1,对list集合进行排序。
		sort(list):对list集合进行排序;list集合中的元素必须具有自然顺序的特性; 
		sort(list, comparator);如果list集合中的元素不具备自然顺序的特性,那么必须要自定义一个比较器,
								定义元素的比较规则,才能对元素进行排序;	
	
	2,对list集合进行二分查找:根据键值查找指定元素的索引值;(前提该集合一定要有序)		
		int binarySearch(list, key);	
		int binarySearch(list, key, Comparator); 
		
	3,获取集合中的最大值或者最小值。
		max(Collection)
		max(Collection, comparator)
		min(Collection)
		min(Collection, comparator)
		
	4,对list集合进行反转。只是将集合中的元素位置进行反转,所以不需要比较器;
		reverse(list);
		
	5,可以将不同步的集合变成同步的集合。
		Set synchronizedSet(Set<T> s)
		Map synchronizedMap(Map<K,V> m)
		List synchronizedList(List<T> list)	
 */
 
class Employee{
	
	String name;
	int salary;
	
	public Employee(String name, int salary) {
		super();
		this.name = name;
		this.salary = salary;
	}
	
	@Override
	public String toString() {
		return "{name=" + name + ", salary=" + salary + "}";
	}
	
}
 
// 自定义比较器,定义比较规则
class ListComparator implements Comparator<Employee>{
 
	@Override
	public int compare(Employee o1, Employee o2) {
		return o1.salary - o2.salary;
	}
 
}
 
public class Demo4 {
 
	@Test
	public void test1(){
		List<String> list = new ArrayList<String>();
		list.add("www");
		list.add("mmm");
		list.add("qqq");
		System.out.println("集合中的元素:" + list);	// 默认排序:[www, mmm, qqq]
		
		// 对list集合进行排序;
		Collections.sort(list);
		System.out.println("排序后的元素:" + list);	// 手动排序:[mmm, qqq, www]
 
		// 因为排序之后,"mmm"是第一个元素,所以查出的索引值为 0;
		System.out.println("查找指定元素的索引值:" + Collections.binarySearch(list, "mmm"));	
		
		// 获取集合中最大的元素和最小的元素:
		System.out.println("集合中最大的元素:" + Collections.max(list));
		System.out.println("集合中最小的元素:" + Collections.min(list));
		
		// 对集合中的元素进行反转;
		Collections.reverse(list);
		System.out.println("反转之后的元素:" + list);
		
		System.out.println("------------");
		
		List<Employee> list2 = new ArrayList<Employee>();
		list2.add(new Employee("张三", 800));
		list2.add(new Employee("李四", 900));
		list2.add(new Employee("王五", 600));
		System.out.println("集合中的元素:" + list2); 
		
		// 创建自定义比较器对象:
		ListComparator comparator = new ListComparator();
		
		// 对list集合进行排序;如果list集合中的元素不具备自然顺序的特性,那么必须自定义一个比较器,定义比较规则;
		Collections.sort(list2, comparator);
		System.out.println("排序后的元素:" + list2);
		
		// 根据键值查找指定元素的索引值;排序之后,"张三"元素位于第二位,所以索引位 1;
		int index = Collections.binarySearch(list2, new Employee("张三", 800), comparator);
		System.out.println("查询指定元素的索引:" + index);
		
		// 获取集合中最大的元素和最小的元素:
		System.out.println("集合中最大的元素:" + Collections.max(list2, comparator));
		System.out.println("集合中最小的元素:" + Collections.min(list2, comparator));
		
	}
	
	@Test
	public void test2(){
		
		List<String> list = new ArrayList<String>();
		
		// 将List集合变成线程安全的集合;但是会降低操作效率;
		List<String> list2 = Collections.synchronizedList(list);	
	}
	
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值