1.掌握Collections 与 Collection 接口的区别
2.掌握Collections 类中提供的主要操作方法
在面试题目中有可能会问这样一个问题,请回答, Collections 和 Collection 的关系。Collections 类与 Collection 没有直接的关系,但是与集合中的各个接口都有操作的方法支持。
空集合的操作:
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]