1.工具类,是对集合和数组功能的补充。
工具类有两种
Collections是集合框架工具类,里面的方法是静态的。
Arrays是数组工具类,里面的方法是静态的。
2.Collections常用的方法
Collections:
排序:
sort();
sort(list,Comparator);
交换值:
swap(list,i,j);
折半查找:
binarySearch(list,key);
获取最大值:
max();
max(list,Comparator);通过不同的比较器,获取最大值。
替换:
repalceAll(list,Old,New);指定替换
fill(list,new);全部替换
排列:
shuffle(list);随机排列
逆转顺序:
Comparator<T> reverseOrder();
Comparator<T> reverseOrder(Comparator<T> cmp)
2.2 Arrays常用方法
Arrays里面最重要的一个方法是
public static <T> List<T> asList(T... a)
好处:可以使用集合的方法操作数组元素。
注意:数组的长度是固定的,所以对于集合增删方法是不可以使用的,否则会放生异常。
可以实现数组转集合;
如果数组中的元素是对象,那么转成集合时,直接将数组中的元素作为集合中的元素进行存储。
如果数组中的对象是基本数据类型,那么会将该数组作为集合中的元素进行存储。
集合转数组,使用的是Collections中的toArray方法。
集合转数组可以对集合中的元素操作的方法进行限定,不允许对其增删。
3.给非同步的集合加锁原理
List list = new ArrayList();//非同步
list = MyCollections.synList(list);//返回了一个同步的list
//给非同步的集合加锁
class MyCollection{
public static List synList(List list){
return new MyList(list);
}
//私有内部类
private class MyList implements List{
private List list;
private static final Object lock = new Object();
MyList(List list){
this.list = list;
}
public boolean add(Object obj){
synchronized(lock){
return list.add(obj);
}
}
public boolean remove(Object obj){
synchronized(lock){
return list.remove(obj);
}
.....
}
}
4 foreach
foreach语句;
* 格式;
* for(类型 变量:Collection集合|数组)
*
*
* 传统for和高级for的区别
* 传统for可以完成对语句执行很多次,因为可以定义控制循环的增量和条件。
*
* 高级for是一种简化形式。
* 它必须有遍历的目标。该目标要么是数组,要么是Collection单列集合。
* 对数组的遍历如果仅仅是为了获取数组中的元素,可以使用高级for。
* 如果要对数组的角标进行操作建议使用传统for。
*
*可以使用高级for遍历map集合么?
*不可以直接使用,高级for只能遍历单列集合。但是,可以将map转成单列的set,就可以用了。
*
5.函数的可变参数。
*函数的可变参数,其实就是一个数组,但是接受的是数组中的元素,自动将这些元素封装成了数组,简化了调用者的书写。
*
* 注意事项:
* 可变参数类型必须定义在参数列表的结尾处。