在集合框架操作中JDK1.5版本的一些新特性
增强for循环
格式:for(数据类型 变量名 :被遍历的集合/数组) {}优点:
对基本数据类型数组操作时,可以直接遍历获取;而迭代器需要装箱成对象之后才能获取;传统需要手动获取
简化书写,但也有许多局限性
增强for循环对集合进行遍历,只能用于集合/数组元素的获取,不能对集合进行操作
Iterator迭代除了遍历,还可以进行remove集合中的元素
ListIterator还可以对集合进行增删改查的动作
传统for和增强for的区别:
增强for的局限性:必须有遍历的目标(集合或数组)
在遍历数组时,建议使用传统for
操作示例:
import java.util.*; class ForEachDemo { public static void main(String[] args) { ArrayList<String> al = new ArrayList<String>(); al.add("a01"); al.add("a03"); al.add("a02"); for (String s : al ) //一、对字符串类型的集合对象进行操作 { // s = "haha"; //增强for只能取出,不能对al进行操作 sop(s); } sop(al); //打印al /* Iterator<String> it = al.iterator();//迭代 while (it.hasNext()) { sop(it.next()); } */ int[] arr = {2,5,6}; for (int i : arr ) //二、对基本数据类型数组元素操作,可以直接遍历获取 { sop("i: "+i); //局限性,无法操作角标 } for (int x=0; x<arr.length ;x++ ) //传统for { sop("i:"+arr[x]);//可以对角标进行操作 } HashMap<Integer,String> hm = new HashMap<Integer,String>();//三、对Map集合对象进行操作 hm.put(1,"a"); hm.put(2,"b"); hm.put(3,"c"); // Set<Integer> keySet = hm.keySet(); //简化书写 for (Integer i : hm.keySet() ) //1、keySet取出方法 { sop(i+" : "+hm.get(i)); } // Set<Map.Entry<Integer,String>> entrySet = hm.entrySet(); // for (Map.Entry<Integer,String> me: entrySet()) for (Map.Entry<Integer,String> me: hm.entrySet())//2、entrySet取出方法 { sop(me.getKey()+" : "+me.getValue()); } } public static void sop(Object obj) { System.out.println(obj); } }
可变参数:
其实是一种数组参数的简写形式,不用每一次都建立数组对象,只要将元素作为参数传递即可,隐式的将这些参数封装成了数组,。JVM自动完成封装注意事项:可变参数一定要定义在参数列表的最后边
示例:
class ParaMethodDemo { public static void main(String[] args) { //show(3,4); /* int[] arr = {3,4};//虽然少定义了方法,但是每次都要定义一个数组作为参数 show(arr); int[] arr1 = {3,4,5} show{arr1} */ show("haha",2,3,3,5,85,6);//可变参数一定要定义在参数列表的最后边 // show(); } public static void show(String str , int... arr) //3、可变参数,不用再new数组 { sop(arr.length); } /* public static void show(int[] arr) //2、将参数封装成数组,实现参数间接可变 {} public static void show(int a, int b)//1、参数列表不同时多个函数重载 { sop(a+","+b); } */ public static void sop(Object obj) { System.out.println(obj); } }
ImportStatic静态导入
导入的是该类的静态成员一个类被静态导入后,调用该类的静态方法就不用再(类名.方法名),可以直省略类名来调用
当类名重名时,要指定具体的包名;当方法重名时,要指定具体的对象或类
示例:
import java.util.*; import static java.util.Arrays.*;//导入的是Arrays类中所有静态成员 import static jaav.lang.System.*;// System class StaticImport { public static void main(String[] args) { int[] arr = {3,6,9}; sort(arr); //省略Arrays. int index = binarySearch(arr,1);//省略Arrays. sop(Arrays.toString(arr)); //Object中也有toString所以不能省略,以明确调用的是哪个 sop("Index= "+index); } public static void sop(Object obj) { out.println(obj);//省略 System. } }