JAVA中Collection和Collections的区别
2016-11-27 22:46
288 查看
1.java.util.Collection 是一个集合接口。
它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
以下接口实现了Collection接口:
map,set,list,vector
下图是collection接口定义的方法(截自jdk1.7官方文档):
2.java.util.Collections 是一个包装类。
它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
具体来看下Collections中的sort方法:(以下代码摘自Collections类中源码)
可以看到他的静态方法sort方法可以传入一个list,上面说过list是实现了Collection接口。然后将list转成了数组对象后,调用了Array的sort方法,将数组排序,再用list的迭代器(注意不是collection迭代器)一个个得赋值回去,就使得传入的list变成了一个有序的list。
对以上的步骤相信看了源码都能看懂,数组的sort方法底层调用的是一个DualPivotQuicksort的方法,看着名字像快排,但可能有些不同,暂时没有仔细去研究。
需要注意的是
由于set,map都有SortedSet,TreeSet和SortedMap实现类,所以Collections中并没有对set和map支持sort方法
sort方法默认的顺序是升序,如果你想要降序排,你可以调用Collections中的另一个sort方法
可以看到,这个sort方法是传入了一个比较器,所以你可以定义如何来排序。
它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
以下接口实现了Collection接口:
map,set,list,vector
下图是collection接口定义的方法(截自jdk1.7官方文档):
2.java.util.Collections 是一个包装类。
它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class TestCollections { public static void main(String args[]) { //注意List是实现Collection接口的 List list = new ArrayList(); int array[] = {5, 1, 3, 4, 2}; for (int i = 0; i < array.length; i++) { list.add(array[i]); } Collections.sort(list); for (int i = 0; i < array.length; i++) { System.out.println(list.get(i)); } // 结果:1 2 3 4 5 } }
具体来看下Collections中的sort方法:(以下代码摘自Collections类中源码)
public static <T extends Comparable<? super T>> void sort(List<T> list) { Object[] a = list.toArray(); Arrays.sort(a); ListIterator<T> i = list.listIterator(); for (int j=0; j<a.length; j++) { i.next(); i.set((T)a[j]); } }
可以看到他的静态方法sort方法可以传入一个list,上面说过list是实现了Collection接口。然后将list转成了数组对象后,调用了Array的sort方法,将数组排序,再用list的迭代器(注意不是collection迭代器)一个个得赋值回去,就使得传入的list变成了一个有序的list。
对以上的步骤相信看了源码都能看懂,数组的sort方法底层调用的是一个DualPivotQuicksort的方法,看着名字像快排,但可能有些不同,暂时没有仔细去研究。
需要注意的是
由于set,map都有SortedSet,TreeSet和SortedMap实现类,所以Collections中并没有对set和map支持sort方法
sort方法默认的顺序是升序,如果你想要降序排,你可以调用Collections中的另一个sort方法
public static <T> void sort(List<T> list, Comparator<? super T> c) { Object[] a = list.toArray(); Arrays.sort(a, (Comparator)c); ListIterator i = list.listIterator(); for (int j=0; j<a.length; j++) { i.next(); i.set(a[j]); } }
可以看到,这个sort方法是传入了一个比较器,所以你可以定义如何来排序。
相关文章推荐
- java中Collection与Collections的区别 Collections.sort
- java中Collection与Collections的区别
- java辨析(2):Collection和Collections区别
- Java中Collection和Collections的区别
- java中Collection与Collections的区别
- java collections和collection的区别
- Java中Collection和Collections的区别
- Java中Collection与Collections的区别
- Java中Collection和Collections的区别
- Java中Collection和Collections的区别
- Java中Collection与Collections的区别总结
- Java中Collection和Collections的区别
- java中collections和collection的区别
- 面试题:Java中Collection与Collections的区别
- Java中Collection和Collections的区别
- Java中Collection和Collections的区别 LIST和MAP的区别
- java中Collection与Collections的区别
- Java_Collection和Collections的区别
- Java中Collection和Collections的区别
- Java中Collection和Collections的区别