复习完了集合框架,再来看一下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()方法同样是一个实用的方法。
常用的方法就上面所示,还有很多方法以后碰到再找时间总结。