18-14,Arrays数组工具类方法介绍
1,binarySearch(...)二分查找法,返回索引。
2,equals(...)覆写了Object中的equals,比较内容是否相同,即长度相同且对应位上的元素相同。
3,static void fill(byte[] a,byte val)将val赋给byte[]中的每一个位置。
4,sort(...)将传入的数组排序。
5,toString(),覆写了Object中的toString(),直接打印数组中的元素。
6,toString()的经典实现:
public static String myToString(int[] a) {
int iMax = a.length - 1;
if(iMax == -1) {
return "[]";
}
StringBuilder b = new StringBuilder();
b.append('[');
for(int i=0;;i++) {
b.append(a[i]);
if(i == iMax) {
return b.append(']').toString();
}
b.append(",");
}
}
18-15,Arrays-asList方法
1,static
返回一个受指定数组支持的固定大小的列表。
用asList的原因:Arrays中提供的方法也是相当有限的,如果把数组转换成集合操作就方便多了,比如判断一个元素是否在数组中,Arrays中没有这个方法,就需要自己写一个判断方法,但是如果将这个数组转换成List就可以直接用contains判断了。
2,好处:可以使用集合中的方法操作数组中的元素。
注意:数组的长度是固定的,所以对于集合的增删方法是不能使用的,否则会发生UnsupportedOperationException异常,只要不改变集合长度的方法都可以使用。
但是可以使用set方法用指定元素替换指定的元素。
3,如果数组中的元素是对象,那么转成集合时,直接将数组中的元素作为集合中的元素进行存储。如果数组中的数据是基本数据类型,那么会将该数组作为集合中的元素进行存储。
例如:
int[] arr = {31,11,51,61};
List
System.out.prtinln(list);//[[I@C17164
这时list集合的长度是1,打印结果是打印数组对象。
但是如果定义一个Integer类型数组,即非基本数据类型数组:
Integer[] arr = {31,11,51,61};
List
System.out.println(list);//打印[31,11,51,61]
说明,如果存入非基本数据类型数据,打印的是每个对象的toString()。
18-16,Collection-->toArray方法
1,如何将集合转化成数组呢?
使用的是Collection接口中的toArray方法。
2,集合转成数组:可以对集合中的元素操作的方法进行限定,不允许对其进行增删。
3,toArray方法需要传入一个指定类型的数组。
长度该如何定义呢?
如果长度小于集合的size,那么该方法会创建一个同类型并和集合相同size的数组。
如果长度大于集合的size,那么该方法就会使用指定的数组,存储集合的元素,其他位置默认为null。
所以建议,最好将长度指定为集合的size。
Listlist = new ArrayList (); list.add("abc1"); list.add("abc2"); list.add("abc3"); String[] arr = list.toArray(new String[list.size()]); System.out.println(Arrays.toString(arr));
18-17,JDK1.5新特性-ForEach循环
1,Collection的父接口是Iterable接口,该接口中只有一个iterator迭代器方法,在JDK1.5才出现,因为以后还有可能出现像Collection的顶层父类,都希望他们具备迭代功能,所以抽取出来,提高了扩展性。
2,ForEach循环,增强For循环
格式:for(类型 变量 :Collection集合或数组){...}
传统for和高级for的区别:
(1)传统for可以完成对语句执行很多次,因为可以定义控制循环的增量和条件。
(2)高级for是一种简化形式,它必须有被遍历的目标。该目标要么是数组,要么是Collection单列集合。
对数组的遍历如果仅仅是获取数组中的元素,可以使用高级for。
如果要对数组的角标进行操作建议使用传统for。
可以使用高级for遍历map集合么?
不能直接用,但是可以将map转换成单列的set就可以使用了。
4,实例:
public class Demo1 {
public static void main(String[] args) {
List
list = new ArrayList
(); list.add("abc1"); list.add("abc2"); list.add("abc3"); for(String s : list) {//简化了书写,底层其实是iterator System.out.println(s); } } }
public class Demo2 {
public static void main(String[] args) {
int[] arr = {3,1,5,7,4};
for(int i : arr) {
System.out.println(i);
}
}
}
遍历Map示例:
public class Demo3 {
public static void main(String[] args) {
Map
map = new HashMap
(); map.put(3,"zhangsan"); map.put(1,"wangyi"); map.put(5,"wangcai"); map.put(7,"xiaoqiang"); for(Integer key : map.keySet()) { String value = map.getKey