java的collections类

 Java提供了一个操作Set List Map 的工具类Collections .

  里面有大量方法对集合元素进行排序,查询修改等操作。

  还能把集合设为不可变。

  对集合对象实现线程同步控制。

同步控制

在hashtable那提过,虽然他是线程安全的,但是他性能比较差,所以Collections.synchronizedXxx(new Xxx()) ,例子Collections.synchronizedCollection(new ArrayList())就能转为线程安全的。HashSet TreeSet ArrayList ArrayDeque LinkedLisr HashMap TreeMap都是线程不安全的。

排序操作:

以下常用的类方法可对List集合元素进行排序:

void reverse(List list) 反转List集合元素进行排序

void shuffle(List list) 按自然顺序对List排序,升序

void sort(List list)对List进行排序

void sort(List list,Comparator c)根据指定的Comparator 产生的顺序对List进行排序

 void swap(List list ,int i,int j)把list集合从i到j位置的集合元素交换,

void rotate(List list,int distance) 当distance为正数时,把List集合后distance个元素整体移到前面。如果是负数,则吧前distance个元素整体移到后面。不改变集合的长度

 

查找,替换操作

  static int binarySearch(List list,Object key) 二分搜索法来搜索指定对象在list索引。(只有有序状态List集合才能用二分查询

  static Object max(Collection coll) 根据元素的自然顺序,返回集合的最大元素

  static Object max(Comparator c,Collection coll) 根据指定Comparator 的给出的顺序,返回集合的最大元素

  static Object min(Collection coll) 根据元素的自然顺序,返回集合的最小元素

  static Object min(Comparator c,Collection coll) 根据指定Comparator 的给出的顺序,返回集合的最小元素

   static int frequency(Collection coll,Object key) 返回指定集合中指定对象的数量

   static void fill(Collection coll,Object obj) 用指定对象obj替换指定List集合中的所有元素

 static int indexOfSubList(List source,List target)返回指定子List对象在母List对象中出现的第一次出现位置索引。如果没有就返回-1

 static int LastIndexOfSubList(List source,List target)返回指定子List对象在母List对象中出现的最后一次出现位置索引。如果没有就返回-1

 static boolean replaceAll(List list,Object newVal,Object oldVal)用一个新值替换List集合里的旧值

设置不可变集合

emptyXxx()返回一个空的不可变的集合对象

singletonXxx()返回只包含指定对象的(只有一个或一项的)不可变的集合对象

unmodifiableXxx()返回指定集合对象的不可变的视图

 

collections对实体类排序,代码示例:


package test;

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


/**
 * Collections工具类使用
 */
public class TestCollections {


	public static void main(String[] args) {
		ageAsc();
		System.out.println("根据age升序排序");
		ageDes();
		System.out.println("根据age降序排序 ");
		ageAscNumberAsc();
		System.out.println("根据Age和Number升序排序");
		ageDesNumberDes();
		System.out.println("根据Age和Number降序排序  ");
	}
	/**
	 * 
	* @Title: ageAsc  
	* @Description: 根据age升序排序
	* @param     参数  
	* @return void    返回类型  
	* @throws
	 */
	private static void ageAsc() {
		Comparator<Company> comparator = Comparator.comparing(Company::getNumber);//按照a升序
		List<Company> list = new ArrayList<Company>();
		Company company = new Company();
		company.setAge(1);
		company.setNumber(1);
		Company company1 = new Company();
		company1.setAge(2);
		company1.setNumber(2);
		Company company2 = new Company();
		company2.setAge(3);
		company2.setNumber(3);
		list.add(company2);
		list.add(company1);
		list.add(company);
		System.out.println(list);
		System.out.println("------------------------------------------");
		Collections.sort(list, comparator);
		System.out.println(list);
	}
	/**
	 * 
	* @Title: ageDes  
	* @Description: 根据age降序排序 
	* @param     参数  
	* @return void    返回类型  
	* @throws
	 */
	private static void ageDes() {
		List<Company> list = new ArrayList<Company>();
		Company company = new Company();
		company.setAge(1);
		company.setNumber(1);
		Company company1 = new Company();
		company1.setAge(2);
		company1.setNumber(2);
		Company company2 = new Company();
		company2.setAge(3);
		company2.setNumber(3);
		list.add(company2);
		list.add(company1);
		list.add(company);
		System.out.println(list);
		System.out.println("------------------------------------------");
		
		Comparator<Company> comparator = new Comparator<Company>() {
			@Override
			public int compare(Company c1, Company c2) {
				if(c1.getAge() < c2.getAge()) {
					return 1;
				}
				return -1;
			}
		};
		System.out.println("------------------------------------------");
		Collections.sort(list, comparator);
		System.out.println(list);
	}
	/**
	 * 
	* @Title: ageAscNumberAsc  
	* @Description: 根据Age和Number升序排序
	* @param     参数  
	* @return void    返回类型  
	* @throws
	 */
	private static void ageAscNumberAsc() {
		 Comparator<Company> comparatora = Comparator.comparing(Company::getNumber);//按照a升序
	     Comparator<Company> comparatorb = Comparator.comparing(Company::getAge);//按照a升序
			List<Company> list = new ArrayList<Company>();
			Company company = new Company();
			company.setAge(1);
			company.setNumber(1);
			Company company1 = new Company();
			company1.setAge(1);
			company1.setNumber(2);
			Company company2 = new Company();
			company2.setAge(3);
			company2.setNumber(3);
			list.add(company1);
			list.add(company2);
			list.add(company1);
			list.add(company);
			list.add(company1);
			System.out.println(list);
			System.out.println("------------------------------------------");
			Collections.sort(list, comparatora.thenComparing(comparatorb));
			System.out.println(list);
	}
	/**
	 * 
	* @Title: ageDesNumberDes  
	* @Description: 根据Age和Number降序排序  (顺序反转)
	* @param     参数  
	* @return void    返回类型  
	* @throws
	 */
	private static void ageDesNumberDes() {
		Comparator<Company> comparatora = Comparator.comparing(Company::getNumber);//按照a升序
	     Comparator<Company> comparatorb = Comparator.comparing(Company::getAge);//按照a升序
			List<Company> list = new ArrayList<Company>();
			Company company = new Company();
			company.setAge(1);
			company.setNumber(1);
			Company company1 = new Company();
			company1.setAge(1);
			company1.setNumber(2);
			Company company2 = new Company();
			company2.setAge(3);
			company2.setNumber(3);
			list.add(company1);
			list.add(company2);
			list.add(company1);
			list.add(company);
			list.add(company1);
			System.out.println(list);
			System.out.println("------------------------------------------");
			Collections.sort(list, comparatora.thenComparing(comparatorb));
			System.out.println(list);
			Collections.reverse(list);
			System.out.println(list);
	}
/**
	 * 
	* @Title: ageDes  
	* @Description: 根据Age和Number降序排序 
	* @param     参数  
	* @return void    返回类型  
	* @throws
	 */
	private static void ageDesNumberDes2() {
		List<Company> list = new ArrayList<Company>();
		Company company = new Company();
		company.setAge(1);
		company.setNumber(1);
		Company company1 = new Company();
		company1.setAge(2);
		company1.setNumber(2);
		Company company2 = new Company();
		company2.setAge(3);
		company2.setNumber(3);
		list.add(company2);
		list.add(company1);
		list.add(company);
		System.out.println(list);
		System.out.println("------------------------------------------");
		
		Comparator<Company> comparator = new Comparator<Company>() {
			@Override
			public int compare(Company c1, Company c2) {
				if(c1.getAge() < c2.getAge()) {
					return 1;
				}
                if(c1.getAge() == c2.getAge() && c1.getNumber() < c2.getNumber) {
					return 1;
				}
				return -1;
			}
		};
		System.out.println("------------------------------------------");
		Collections.sort(list, comparator);
		System.out.println(list);
	}
}
class Company {
	private Integer number;
	
	private Integer age;
	
	private String name;

	@Override
	public String toString() {
		return "Company [number=" + number + ", age=" + age + ", name=" + name + "]";
	}

	/**
	 * @return the number
	 */
	public Integer getNumber() {
		return number;
	}

	/**
	 * @param number the number to set
	 */
	public void setNumber(Integer number) {
		this.number = number;
	}

	/**
	 * @return the age
	 */
	public Integer getAge() {
		return age;
	}

	/**
	 * @param age the age to set
	 */
	public void setAge(Integer age) {
		this.age = age;
	}

	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}
	
	
}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值