复习完了集合框架,再来看一下collections工具类的一些基本用法,更加完善集合框架的知识库。
1、什么是Collections呢?
Collections是对集合框架的一个工具类。它里边的方法都是静态的,不需要创建对象。并未封装特有数据。在Collections工具类中大部分方法是用于对List集合进行操作的,如比较,二分查找,随机排序等。
Collections:它的出现给集合操作提供了更多的功能。这个类不需要创建对象,内部提供的都是静态方法,所以用起来很方便。
这里注意的是,Collections和Collection是不同的。
那么Collection和Collections的区别?
(1)Collection:是单列集合的顶层接口,有子接口List和Set。
(2)Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的方法
Collecitons中的常见方法 public static <T> void sort(List<T> list) public static <T> int binarySearch(List<?> list,T key) public static <T> T max(Collection<?> coll) public static void reverse(List<?> list) public static void shuffle(List<?> list)
下面举一些例子简单说明一下:
例子1:
public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("d"); list.add("c"); list.add("a"); list.add("b"); System.out.println(list); Collections.sort(list); System.out.println(list); } 得到的结果为:[d, c, a, b] [a, b, c, d]
这个方法是list集合进行元素的自然顺序排序,当然还可以用方法Collections.sort(list,new ComparatorByLen()),根据指定比较器排序。
例子2:
ArrayList<String> list = new ArrayList<String>(); list.add("d"); list.add("c"); list.add("a"); list.add("b"); list.add("e"); System.out.println(list); System.out.println(Collections.binarySearch(list,"a")); System.out.println(Collections.binarySearch(list, "b")); System.out.println(Collections.binarySearch(list, "c")); System.out.println(Collections.binarySearch(list, "d")); System.out.println(Collections.binarySearch(list, "e")); 得到的结果是:[d, c, a, b, e] 2 3 -5 -5 4
为什么会出现负数呢?因为在二分查找中,集合中的元素必须是根据列表元素的自然顺序对列表进行升序排序,如果不是的话,得到的结果不确定,API中说
参数: a - 要搜索的数组 key - 要搜索的值 返回: 如果它包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。 插入点 被定义为将键插入数组的那一点:即第一个大于此键的元素索引,如果数组中的所有元素都小于指定的键,则为 a.length。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。所以,二分查找这个方法必须是对排序过后的集合使用。
ArrayList<String> list = new ArrayList<String>(); list.add("d"); list.add("c"); list.add("a"); list.add("b"); list.add("e"); System.out.println(list); Collections.sort(list); System.out.println(Collections.binarySearch(list,"a")); System.out.println(Collections.binarySearch(list, "b")); System.out.println(Collections.binarySearch(list, "c")); System.out.println(Collections.binarySearch(list, "d")); System.out.println(Collections.binarySearch(list, "e"));这下得出的结果就为:[d, c, a, b, e] 0 1 2 3 4
例子3:
ArrayList<String> list = new ArrayList<String>(); list.add("d"); list.add("c"); list.add("a"); list.add("b"); list.add("e"); System.out.println(Collections.max(list)); System.out.println(Collections.min(list));得到的结果为:
e
a
max()方法是找到list集合中的最大值,min()是找到list集合中的最小值。
例子4:
ArrayList<String> list = new ArrayList<String>(); list.add("d"); list.add("c"); list.add("a"); list.add("b"); list.add("e"); System.out.println(list); Collections.reverse(list); System.out.println(list); 得到的结果是:[d, c, a, b, e] [e, b, a, c, d]
reverse()是翻转list集合的方法。
还有一个方法shuffle()方法,是集合中的元素随意排序。
同样是上面的list:
Collections.shuffle(list); System.out.println(list); Collections.shuffle(list); System.out.println(list); Collections.shuffle(list); System.out.println(list); 得到的结果是:[d, c, b, a, e] [d, b, a, e, c] [c, d, e, a, b]
三次的结果都不一样,证明是随意排序的。
同样是一开始的list:
System.out.println(list); Collections.swap(list, 0, 3); System.out.println(list);得到结果是:[d, c, a, b, e] [b, c, a, d, e]
得到的结论是第一个位置的元素和第四个位置的元素位置互换了。swap()方法同样是一个实用的方法。
常用的方法就上面所示,还有很多方法以后碰到再找时间总结。