集合工具类:Collections

1.掌握Collections 与 Collection 接口的区别

2.掌握Collections 类中提供的主要操作方法

在面试题目中有可能会问这样一个问题,请回答, Collections 和 Collection 的关系。Collections 类与 Collection 没有直接的关系,但是与集合中的各个接口都有操作的方法支持。


集合工具类:Collections
 

空集合的操作:

public static final <T> List <T> emptyList()

public static final <T> Set <T> emptySet()

import java.util.Collections ;
import java.util.List ;
public class CollectionsDemo1{
	public static void main(String args[]){
		List<String> allList = Collections.emptyList() ;	// 返回空的 List集合
		allList.add("Hello") ;	// 加入数据
	}
}

 执行结果出现异常:

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.add(AbstractList.java:131)
	at java.util.AbstractList.add(AbstractList.java:91)
	at CollectionsDemo1.main(CollectionsDemo1.java:6)

 原因:使用Collections.emptyList(),返回一个空的List,但是发现它不支持Add功能,调用Add会抛出unsupportedException,在以后要返回一个空的List,并还需要后续操作时,不能使用Collections.emptyList()方法,看文档发现,List的实现类都有自己的实现,而返回的EmptyList的实现没有实现add(int index, E element方法,使用了
AbstractList.add(int index, E element){
    throw new UnsupportedOperationException();
}

 

如果要想为集合中增加内容,则肯定使用add() 方法,在Collections 中也提供了专门的增加操作。

public static <T> boolean addAll (Collection<? super T> c, T... elements)使用了可变参数,所以,可以任意输入各种类型的数据。

import java.util.Collections ;
import java.util.List ;
import java.util.ArrayList ;
import java.util.Iterator ;
public class CollectionsDemo1{
	public static void main(String args[]){
		List<String> all = new ArrayList<String>() ;	// 返回空的 List集合
		Collections.addAll(all,"MLDN","LXH","mldnjava") ;//用collections的方法想集合中添加元素
		System.out.print("反转前集合中的内容:");
		Iterator<String> iter = all.iterator() ;
		while(iter.hasNext()){
			System.out.print(iter.next() + "、") ;
		}
		System.out.println();
		Collections.reverse(all);
		System.out.print("反转后集合中的内容:");
		iter = all.iterator() ;
		while(iter.hasNext()){
			System.out.print(iter.next() + "、") ;
		}
	}
}

 

//output result
反转前集合中的内容:MLDN、LXH、mldnjava、
反转后集合中的内容:mldnjava、LXH、MLDN、

 排序操作:public static <T extends Comparable <? super T>> void sort(List<T> list)

import java.util.Collections ;
import java.util.List ;
import java.util.ArrayList ;
public class CollectionsDemo1{
	public static void main(String args[]){
		List<String> all = new ArrayList<String>() ;	// 返回空的 List集合
		Collections.addAll(all,"1、MLDN","3、mldnjava","2、LXH","c、aaa") ;
		Collections.addAll(all,"B、www.mldn.cn") ;
		Collections.addAll(all,"A、www.mldnjava.cn") ;
		System.out.println("排序之前的集合:" + all) ;
		Collections.sort(all) ;
		System.out.println("排序之后的集合:" + all) ;
		
		
	}
}

输出结果:

排序之前的集合:[1、MLDN, 3、mldnjava, 2、LXH, c、aaa, B、www.mldn.cn, A、www.mldnjava.cn]
排序之后的集合:[1、MLDN, 2、LXH, 3、mldnjava, A、www.mldnjava.cn, B、www.mldn.cn, c、aaa]

 

交换指定位置的内容:public static void swap(List <?> list, int i, int j)

 

import java.util.Collections ;
import java.util.List ;
import java.util.ArrayList ;
public class CollectionsDemo1{
	public static void main(String args[]){
		List<String> all = new ArrayList<String>() ;	// 返回空的 List集合
		Collections.addAll(all,"1、MLDN","2、LXH","3、mldnjava") ;
		System.out.println("交换之前的集合:" + all) ;
		Collections.swap(all,0,2) ;
		System.out.println("交换之后的集合:" + all) ;
		
	}
}

 输出结果:

交换之前的集合:[1、MLDN, 2、LXH, 3、mldnjava]
交换之后的集合:[3、mldnjava, 2、LXH, 1、MLDN]

 

 替换内容:public static <T> boolean replaceAll (List <T> list, T oldVal, TnewVal)

import java.util.Collections ;
import java.util.List ;
import java.util.ArrayList ;
public class CollectionsDemo1{
	public static void main(String args[]){
		List<String> all = new ArrayList<String>() ;	// 返回空的 List集合
		Collections.addAll(all,"MLDN","LXH","mldnjava") ;
		System.out.println("替换之前的结果"+all);
		if(Collections.replaceAll(all,"LXH","李兴华")){// 替换内容
			System.out.println("内容替换成功!") ;
		}
		System.out.print("替换之后的结果:") ;
		System.out.print(all) ;
		
	}
}

 输出结果:

替换之前的结果[MLDN, LXH, mldnjava]
内容替换成功!
替换之后的结果:[MLDN, 李兴华, mldnjava]