(集合框架)collections工具类的常用方法

复习完了集合框架,再来看一下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()方法同样是一个实用的方法。


常用的方法就上面所示,还有很多方法以后碰到再找时间总结。

猜你喜欢

转载自blog.csdn.net/m0_38012174/article/details/77751880