1. 程式人生 > >第三十七講 JDK1.5新特性

第三十七講 JDK1.5新特性

高階for迴圈

高階for迴圈的作用是用於遍歷Collection集合或陣列。其格式為:

for(資料型別(一般是泛型型別) 變數名 : 被遍歷的集合(Collection)或者陣列) {

}

遍歷Collection集合

之前我們使用迭代器是這樣遍歷的。

package cn.liayun.foreach;

import java.util.ArrayList;
import java.util.Iterator;

public class ForeachDemo {

	public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>(); list.add("abc1"); list.add("abc2"); list.add("abc3"); for (Iterator<String> it = list.iterator(); it.hasNext();) { String str = it.next(); System.out.println(str); } } }

現在我們可使用高階For迴圈了,主要就是為了簡化書寫。

package
cn.liayun.foreach; import java.util.ArrayList; import java.util.Iterator; public class ForeachDemo { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("abc1"); list.add("abc2"); list.add("abc3"); /* for (Iterator<String> it = list.iterator(); it.hasNext();) { String str = it.next(); System.out.println(str); } */
for (String s : list) { System.out.println(s); } } }

小結

高階for迴圈對集合進行遍歷,只能獲取集合中的元素,但是不能對集合進行操作。迭代器除了遍歷,還可以進行remove()集合中元素的動作,如果使用ListIterator,還可以在遍歷過程中對集合進行增刪改查的操作。

遍歷陣列

對於陣列,我們可使用傳統for迴圈遍歷。

package cn.liayun.foreach;

public class ForeachDemo {

	public static void main(String[] args) {
		int[] arr = {3, 5, 1};
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
	}

}

現在可使用高階for迴圈進行遍歷了。

package cn.liayun.foreach;

public class ForeachDemo {

	public static void main(String[] args) {
		int[] arr = {3, 5, 1};
		
		/*
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
		*/
		
		for (int i : arr) {
			System.out.println(i);
		}
	}

}

小結

傳統for和高階for有什麼區別呢? 高階for有一個侷限性,必須有被遍歷的目標,而該目標只能是Collection或陣列。建議在遍歷陣列的時候還是希望使用傳統for,因為傳統for可以定義角標。

遍歷Map集合

對於Map集合,我們也可以使用高階for迴圈進行遍歷。

第一種遍歷方式

package cn.liayun.foreach;

import java.util.HashMap;

public class ForeachDemo {

	public static void main(String[] args) {
		HashMap<Integer, String> hm = new HashMap<Integer, String>();
		hm.put(1, "a");
		hm.put(2, "b");
		hm.put(3, "c");
		
		for(Integer key : hm.keySet()) {
			String value = hm.get(key);
			System.out.println(key + "::" + value);
		}
	}

}

第二種遍歷方式

package cn.liayun.foreach;

import java.util.HashMap;
import java.util.Map;

public class ForeachDemo {

	public static void main(String[] args) {
		HashMap<Integer, String> hm = new HashMap<Integer, String>();
		hm.put(1, "a");
		hm.put(2, "b");
		hm.put(3, "c");
		
		/*
		for(Integer key : hm.keySet()) {
			String value = hm.get(key);
			System.out.println(key + "::" + value);
		}
		*/
		
		for(Map.Entry<Integer, String> me : hm.entrySet()) {
			Integer key = me.getKey();
			String value = me.getValue();
			System.out.println(key + "------" + value);
		}
		
	}

}

可變引數

可變引數其實就是一種陣列引數的簡寫形式,不用每一次都手動的建立陣列物件,只要將要操作的元素作為引數傳遞即可,隱式地將這些引數封裝成了陣列。

package cn.liayun.param;

public class ParamDemo {

	public static void main(String[] args) {
		int sum = add(3, 4, 10, 6, 7, 43, 8);
		
		int sum2 = add(99, 11, 33, 22);
	}
	
	/*
	 * 可變引數需要注意,只能定義在引數列表的最後。
	 */
	public static int add(int... arr) {
		int sum = 0;
		for (int i = 0; i < arr.length; i++) {
			sum += arr[i];
		}
		return sum;
	}

}

注意:方法的可變引數在使用時,可變引數一定要定義在引數列表的最後面。

靜態匯入

package cn.liayun.staticimport;

import java.util.*;
import static java.util.Collections.*;//匯入的是Collections類中的所有靜態成員
import static java.lang.System.*;//匯入了System類中所有靜態成員

public class StaticImportDemo {

	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("a");
		list.add("c");
		
		sort(list);
		
//		System.out.println(max(list));
		out.println("hello");
	}

}

注意:當類名重名時,需要指定具體的包名;當方法重名時,需要指定具備所屬的物件或類。