第三十七講 JDK1.5新特性
阿新 • • 發佈:2018-11-29
高階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");
}
}
注意:當類名重名時,需要指定具體的包名;當方法重名時,需要指定具備所屬的物件或類。