【学习日记】集合框架知识点总结(3)--工具类

时间:2022-04-03 19:22:29

  集合框架的工具类包括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可以定义脚标。