4.5Utilities工具类
4.5.1 Collections
Collections类静态方法
1、publicstatic <T extendsComparable<? super T>> voidsort(List<T> list)
T extends Comparable表示T类型是可以排序的类型。
2、public static <T> voidsort(List<T> list,Comparator<?super T> c)
T类型可以是不排序的类。
3、public static <T extendsComparable<?super T>> Tmax(Collection<?extends T> coll)
4、publicstatic <T>Comparator<T>reverseOrder():反转
static <T> Comparator<T> reverseOrder() :返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序
static <T> Comparator<T>reverseOrder(Comparator<T> cmp) :返回一个比较器,它强行逆转指定比较器的顺序。
5、提供线程安全
集合许多接口、实现类有一个共同的缺点,那就是线程不安全,被多线程操作时,容易出现问题,虽然可以自己加锁但是麻烦。Collections提供特牛的方法,就是给它一个不同步的集合,它返回一个同步的安全的集合。
static <T> Collection<T>synchronizedCollection(Collection<T> c) :返回指定collection 支持的同步(线程安全的)collection。
static <T> List<T> synchronizedList(List<T> list) :返回指定列表支持的同步(线程安全的)列表。
static <K,V> Map<K,V>synchronizedMap(Map<K,V> m) :返回由指定映射支持的同步(线程安全的)映射。 static<T> Set<T> synchronizedSet(Set<T> s) :返回指定 set 支持的同步(线程安全的)set。
static <K,V> SortedMap<K,V>synchronizedSortedMap(SortedMap<K,V> m):返回指定有序映射支持的同步(线程安全的)有序映射。
static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s):返回指定有序 set 支持的同步(线程安全的)有序 set。
4.5.2 Arrays
1、Arrays用于操作数组的工具类。
2、数组转成集合
A、public static <T>List<T>asList(T... a):a为数组,传进来a数组,asList方法将数组转成list集合。
B、将数组转成List集合的好处:可以使用集合的思想和方法来操作数组中的元素。
C、将数组转成List集合的弊端:不可以使用集合的增、删方法,因为数组的长度是固定的,但是例如contains\get\indexof\subList方法,如果使用了增删方法会出现UnsupportedOperationException异常。
D、注意点:如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转成集合中的元素。如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。所以Integer和int[]是有区别的。
3、集合转成数组:此功能不是工具类中的是Collection接口中的toArray方法。
4.6JDK1.5新特性
4.6.1高级for循环
1、JDK1.5新特性,代替迭代器使用时的不爽,简化了书写。底层原理还是迭代器,凡是支撑迭代器的都支持高级for循环。
高级for循环只支持数组和集合。集合中还要注意Map集合需要先转化成Set集合,再用高级for。
2、格式
for(数据类型 变量名:被遍历的集合(Collection)或者数组){……}
3、高级for循环弊端:对集合进行遍历,只能获取元素,但是不能对集合进行操作。
迭代器除了遍历,还可以进行remove集合中的元素动作;迭代器如果是用ListIterator还可以对集合进行增删改查动作。
4、传统和高级for循环的区别
高级for有一个局限性,必须有遍历的目标(数组或者集合)。
建议在遍历数组的时候,还是使用传统for,因为可以使用角标(比如打印100次hello world)。
4.6.2可变参数
1、JDK1.5出现的新特性。可变参数其实就是数组的简写形式。只要将要操作的元素作为参数传递即可,隐式将参数封装成数组。
2、格式
方法的可变参数
格式:
public static void show(String str,int... arr)
{
……
}
注意:可变参数一定要放在参数列表的最后面
3、可变参数注意点:可变参数一定要定义在参数最后面。
4.6.3静态导入
1、JDK1.5出现的新特性。
2、格式:import static 包.*;
import导入的是包中的类;
import static导入的是包中类的成员变量(属性、方法)。
3、静态导入注意点
当类名重名时,需要指定具体的包名;
当方法名重名时,需要指定具体所属的对象或者类。