集合框架的工具类包括Collections和Arrays。
Collections
先要搞清楚Collections和Collection的区别
Collections是一个包装类。它包含各种有关集合操作的静态方法。此类不能实例化,就像一个工具类,服务于Collection框架。
Collction是一个集合接口,是所有集合的父接口,它包含了有关集合基础操作的通用接口方法,其意义在于为各种集合提供了最大化的操作方式。
Collections的常用方法
- 1、查找
- binarySearch(List,T key)二分法查找。
- max(List)和min(List) 查找List里的最大最小值。
- 2、替换
- fill(List,T obj)用obj替换List里的所有元素。
- 3、排序
- reverse(List)反转列表里的元素。
- reverseOrder() 返回一个比较器,它强行逆转实现了 : Comparable 接口的对象 collection 的自然顺序。也可将自己定义的比较器输入进行反转。
- sort()将元素进行自然排序或着比较器排序。
Arrays
提供了操作数组(比如排序和搜索)的各种静态方法。此类还包含一个允许将数组作为列表来查看的静态工厂
Arrays的常用方法
- 1、查询
- binarySearch(List,T key)二分法查找。 各种二分法
- 2、复制
- copyOf(boolean[] original, int newLength) 复制指定的数组,截取或用xx填充(如有必要),以使副本具有指定的长度。
- copyOfRange(T [] original, int from, int to) 将指定数组的指定范围复制到一个新数组。
- fill(T[] a,T val) 将指定的 T 值分配给指定T型数组的每个元素。
- 3、判断
- equals(T[] a, T[] a2) 如果两个指定的T型数组彼此相等,则返回 true。
- 4、排序
- sort(T[] a) 对指定的 T型数组按数字升序或者指定比较器产生的顺序进行排序。
- 5、哈希值
- hashCode(T[] a) 基于指定数组的内容返回哈希码。
asList()–数组变成集合
asList(T[] a ),返回一个受指定数组支持的固定大小的列表。
把数组变成list集合有什么好处?
可以使用集合的思想和方法来操作数组中的元素。
注意:将数组变成集合,不可以使用集合的增删方法。因为数组的长度是固定。
如果你增删。那么会发生UnsupportedOperationException异常。
可以使用例如以下方法:
contains()
get()
indexOf()
subList()
toArray()–集合变数组
该方法是Collection接口中的方法。
toArray(T[] a ),返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
1、指定类型的数组到底要定义多长呢?
当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组。长度为集合的size。
当指定类型的数组长度大于了集合的size,就不会新创建了数组。而是使用传递进来的数组,直接将队列元素替换数组元素。若该数组的元素比队列多,那么会将数组中紧接 collection 尾部的元素设置为 null。 所以创建一个刚刚好的数组最优。
2、为什么要将集合变数组?
为了限定对元素的操作,防止对其进行增删。
高级for循环:
for(T n :Array / Collection){
System.out.println(n);
}
这条代码的结果是把数组或者集合里的元素打印出来。T表示数组或集合里元素的类型。
它只能对集合进行遍历,获取集合元素。但是不能对集合进行操作。
用该for循环打印集合比迭代器方便,但是迭代器还可以进行remove集合中元素的动作。如果是用ListIterator,还可以在遍历过程中对集合进行增删改查的动作。
所以如果只是打印可以使用for循环,如果想进行别的操作则有必要使用迭代器。
传统for和高级for的区别
高级for有一个局限性。必须有被遍历的目标。建议在遍历数组的时候,还是希望是用传统for。因为传统for可以定义脚标。