Arrays:用于操作数组的工具类,里面都是静态方法
/* Arrays:用于操作数组的工具类,里面都是静态方法 asList:将数组转为list集合 */import java.util.*;class ArraysDemo{ public static void main(String[] args){ /* int[] arr={2,4,5}; System.out.println(Arrays.toString(arr)); */ String[] arr={"abc","cc","kkkk"}; /*把数组变成List集合 可以使用集合的思想和方法来操作数组中的元素 **将数组变成集合,不成使用集合的增删方法,因为长度固定 可以使用: contains get indexOf() subList() */ Listlist=Arrays.asList(arr); System.out.println(list.contains("cc")); // list.add("qq"); System.out.println(list); /* int[] nums={2,4,5}; List li=Arrays.asList(nums); 如果数组中的元素都是对象,变成集合时,数组中的元素就直接转成元素 如果数组中的元素都是基本数据类型,会将该数组作为集合中的元素存在 */ }}
集合变数组
Collection中toArray()
import java.util.*;class CollectionToArray{ public static void main(String[] args){ ArrayListal=new ArrayList (); al.add("abc1"); al.add("abc2"); al.add("abc3"); String[] arr=al.toArray(new String[al.size()]); //将al转为数组 /* 1.指定类型的数组长度小于集合的size,该方法内部会创建一个长度合适的新数组 2.当指定类型的数组长度>集合的size,会用null填充 因此长度为al.size() */ System.out.println(Arrays.toString(arr)); }}
为什么需要将集合变为数组?
——为了限定对元素的操作,不需要进行增删
增强for循环
高级for循环
for(数据类型 变量名:被遍历集合(Collection)/数组){}//运行时变量名依次指向集合中的每一个元素,然后取出
对集合进行遍历时,只能获取元素,但不能对集合进行操作
迭代器不但可以遍历,还可以remove(),
如果是ListIterator,还可以在遍历时进行增删改查
import java.util.*;class ForEachDemo{ public static void main(String[] args){ ArrayListal=new ArrayList (); al.add("abc1"); al.add("abc2"); al.add("abc3"); for(String s:al){ //增强for循环,简化迭代器书写 System.out.println(s); } int[] arr1={2,3,5}; for(int s1:arr1){ System.out.println("arr1:"+s1); } HashMap hm=new HashMap (); hm.put(1,"a"); hm.put(2,"b"); hm.put(3,"c"); Set keySet=hm.keySet(); for(Integer i:keySet){ System.out.println(i+"::"+hm.get(i)); } for(Map.Entry me:hm.entrySet()){ System.out.println(me.getKey()+"___"+me.getValue()); } /* Iterator it=al.iterator(); while(it.hasNext()){ System.out.println(it.next()); } */ }}
传统for和高级for的区别
高级for必须有被遍历的目标
在遍历数组时,建议使用传统for,可定义角标,操作性更高
可变参数
JDK5.0出现的新特性
import java.util.*;class ParamMethodDemo{ public static void main(String[] args){ /* int[] arr=(3,4); show(arr); int[] arr(3,4,5); show(arr1); */ //虽然少定义了多个方法,但每次都要重新创建数组 show(2); show(2,3,4,5,6); } /* 可变参数 其实就是上一中数组参数的简写形式 不再手动建立对象,只要传递参数即可 隐式地将这些参数封装成数组 */ public static void show(int...arr){ //...即可变参数 System.out.println(arr.length); } /* public static void show(int[] arr){ } */ /* public static void show(int a,int b){ System.out.println(a+"'"+b); } */}
方法的可变参数在使用时注意:
可变参数一定要定义在参数列表的最后
show(String str,int...arr){}
静态导入
import java.util.*;import static java.util.Arrays.*;//导入Arrays下的所有静态成员import static java.lang.System.*;//导入System下静态成员class StaticImport{ public static void main(String[] args){ int[] arr={3,1,5}; sort(arr);//独有方法可省略Arrays //默认先继承Object类,适用的是Object包中的方法,因此不可省略 int index=Arrays.binarySearch(arr,1); /* System. */out.println(Arrays.toString(arr)); System.out.println(index); }}
当类名重名时,需要指定具体的包
当方法重名时,指定具备所属的对象或类