1. 程式人生 > >Java中foreach用法及常用集合操作

Java中foreach用法及常用集合操作

foreach語句是java5的新特徵之一,在遍歷陣列、集合方面,foreach為開發人員提供了極大的方便。 
foreach語句是for語句的特殊簡化版本,但是foreach語句並不能完全取代for語句,然而,任何的foreach語句都可以改寫為for語句版本。 
foreach並不是一個關鍵字,習慣上將這種特殊的for語句格式稱之為“foreach”語句。從英文字面意思理解foreach也就是“for 每一個”的意思。實際上也就是這個意思。 foreach的語句格式:for(元素型別t 元素變數x : 遍歷物件obj){     引用了x的java語句;} 下面通過幾個例子簡單例子看看foreach是如何簡化程式設計的。

1.首先增強for迴圈和iterator遍歷的效果是一樣的,也就說增強for迴圈的內部也就是呼叫iteratoer實現的,

但是增強for迴圈有些缺點,例如不能在增強迴圈裡動態的刪除集合內容。不能獲取下標等。
2.ArrayList由於使用陣列實現,因此下標明確,最好使用普通迴圈。
3.而對於LinkedList 由於獲取一個元素,要從頭開始向後找,因此建議使用增強for迴圈,也就是iterator。

我這裡用的是Junit的進行的測試。

package com.test;

import java.util.ArrayList;

/**
 * 增強for迴圈
 * 
 */
public class EnhanceDemo {
	/**
	 * 運算元組
	 */
	@Test
	public void testEnhance1() {
		int[] i = { 1, 2, 3, 4 };
		for (int num : i) {
			System.out.println("testEnhance1--> num: " + num);
		}
	}

	/**
	 * 操作List集合
	 */
	@Test
	public void testEnhance2() {
		List<Integer> list = new ArrayList<Integer>();
		list.add(1);
		list.add(2);
		list.add(3);
		list.add(4);
		for (int n : list) {
			int num = n;
			System.out.println("testEnhance2--> num: " + num);

		}
	}

	/**
	 * 傳統方式
	 */
	@Test
	public void testMap() {
		Map<String,String> map = new HashMap<String,String>();
		// Map map = new LinkedHashMap(); // LinkedMap是有序的
		map.put("1", "aaaa");
		map.put("2", "bbbb");
		map.put("3", "cccc");
		map.put("4", "dddd");
		// 拿到keySet,儲存所有的key,通過key獲取到value
		Set<String> set = map.keySet();
		Iterator<String> iterator = set.iterator();
		while (iterator.hasNext()) {
			String key = (String) iterator.next();
			String value = (String) map.get(key);
			System.out.println(key + " = " + value);
		}

		// foreach
		/*for (Object key : set) {
			String value = map.get(key);
			System.out.println(key + " === " + value);
		}*/

	}

	/**
	 * 傳統方式2
	 */
	@Test
	public void testMap2() {
		Map<String,String> map = new HashMap<String,String>();
		// Map map = new LinkedHashMap(); // LinkedMap是有序的
		map.put("1", "aaaa");
		map.put("2", "bbbb");
		map.put("3", "cccc");
		map.put("4", "dddd");
		// 拿到entrySet它單個的鍵值對存放
		Set<Entry<String, String>> set = map.entrySet();
		Iterator<Entry<String, String>> iterator = set.iterator();
		while (iterator.hasNext()) {
			Entry<String, String> entry = iterator.next();
			System.out.println(entry.getKey() + " == " + entry.getValue());
		}
		// foreach
		/*for (Entry<String, String> obj : set) {
			Entry<String, String> entry = obj;
			entry.getKey();
			System.out.println(entry.getKey() + "=== === " + entry.getValue());
		}*/
		 
	}

	/**
	 * 增強for迴圈需要注意的幾個地方: 
	 *  1,它值適合迭代資料(取資料),而不適合修改資料,並不會修改集合的內容(大小etc)
	 *  2,需要修改集合的內容,則需要用傳統的方式。
	 */
	@Test
	public void foreachTest() {
		int[] i = { 1, 2, 3, 4 };
		for (int j : i) {
			j = 10;
			System.out.println("foreach方式:" + i[1]);
		}

		for (int j = 0; j < i.length; j++) {
			System.out.print(i[j]);
			i[j] = 10;
			System.out.println(" ,傳統方式修改:" + i[j]);
		}

		List<String> list = new ArrayList<String>();
		list.add("1");
		for (Object object : list) {
			object = "100";
			System.out.println(list.get(0));
		}
	}
}

上面遍歷Map通過了兩種方法:keySet()和entrySet()。

總結

1,foreach語句是for語句特殊情況下的增強版本,簡化了程式設計,提高了程式碼的可讀性和安全性(如:陣列下標越界問題)。

2,相對老的for語句來說是個很好的補充。提倡能用foreach的地方就不要再用for了,提高了程式設計便捷性。

3,在用到對集合或者陣列索引的情況下,foreach顯得力不從心,這個時候是用傳統的for語句的搞定。

4,foreach一般結合泛型使用。

相關推薦

Javaforeach用法常用集合操作

foreach語句是java5的新特徵之一,在遍歷陣列、集合方面,foreach為開發人員提供了極大的方便。  foreach語句是for語句的特殊簡化版本,但是foreach語句並不能完全取代for語句,然而,任何的foreach語句都可以改寫為for語句版本。  for

JavacompareTo用法原始碼解析

最近遇到一個問題,在日期比較的時候,很麻煩,因為日期比較沒有大於等於,只有大於或者小於,這就導致在比較時間的時候特別麻煩,而且還要由string轉成date格式才能比較,下面是我使用compareTo比較時間字串的程式碼: String putStartTime = Date

FastJsonJSONObject用法常用方法總結

SON協議使用方便,越來越流行,JSON的處理器有很多,這裡我介紹一下FastJson,FastJson是阿里的開源框架,被不少企業使用,是一個極其優秀的Json框架,Github地址: FastJson FastJson對於json格式字串的解析主要用到了下面三個類: 1.JSON:f

Java的資料庫MYSQL基礎操作

1.資料庫 就是存資料的倉庫。本文所使用的為MYSQL資料庫。2.SQL語句        2.1.簡介             它是一種資料庫的程式碼,我們在建立資料庫,向資料庫中新增或修改資訊時,都

Java學習筆記之二十二】解析接口在Java繼承用法實例分析

ani 復制代碼 ads compute 現在 target body 常量 實現接口 一、定義 Java接口(Interface),是一系列方法的聲明,是一些方法特征的集合,一個接口只有方法的特征沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具

Java的日歷類/集合類/數學類/正則表達式/數組工具類等的常用方法與基本功能

calendar類和Data類 Collection類和List 正則表達式regex Math類和Random類 System類和Iterator類 一、 Arrays 針對數組操作的工具類,提供了一些針對數組排序和二分搜索的方法。常用方法:1、public static String

JavaforEach使用lambda表示式,陣列和集合區別

1.陣列怎麼使用lambda 陣列不能直接在forEach中使用lambda表示式 PartnerType[] values = PartnerType.values(); //提示Cannot resolve method 'forEac

javaRequest和Response常用方法舉例

Request的常用方法: setAttribute() 在Request域中儲存資料 setCharacterEncoding() 設定請求引

javadouble型別資料加減操作精度丟失問題解決方法

double型別資料加減操作精度丟失問題 今天在專案中用到double型別資料加減運算時,遇到了一個奇怪的問題,比如1+20.2+300.03,理論上結果應該是321.23,其實結果並不是這樣。 public double add() {

Office 的 Word 常用操作

 在所有 Office 應用程式中,Microsoft Word 可能是應用最廣泛的應用程式,它還經常在自定義 Office 解決方案中扮演重要的角色。開發人員用各種不同的方式使用 Word,有一些方式很簡單,而另一些極其複雜。無論涉及何種自定義解決方案,用 Vis

Java配置ServletServlet常用方法

引言: 最近在寫servlet的時候有一點生疏, 特地寫個筆記記錄一下學習心得, 重點的地方特地加粗放大, 方便日後查閱 什麼是Servlet: Servlet是一個JavaEE的元件,也是JavaEE中的一個規範 該規範有以下約束. 1:約束伺服器

Javastatic作用用法詳解

1.1概述:      static是靜態修飾符,什麼叫靜態修飾符呢?大家都知道,在程式中任何變數或者程式碼都是在編譯時由系統自動分配記憶體來儲存的,而所謂靜態就是指在編譯後所分配的記憶體會一直存在,直到程式退出記憶體才會釋放這個空間,也就是隻要程式在執行,那麼這塊記憶體就

Java二維數組的操作

ocl 繼續 print nbsp ati sta 編寫 sys src //1.二維數組的定義 //2.二維數組的內存空間 //3.不規則數組 輸出要放在循環裏面,放在外面就報錯了 打debug確定二維數組的關系

iptables 用法常用模塊總結

iptables 範圍 著圖 針對 規則 用法 是否 傳輸數據 net iptables傳輸數據包的過程:   1. 當一個數據包進入網卡時,它首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否需

JAVA使用log4jslf4j進行日誌輸出的方法

cto 所在 inf 官方 pat etl 註意 actor 結果   JAVA中輸出日誌比較常用的是log4j,這裏講下log4j的配置和使用方法,以及slf4j的使用。 一、下載log4j的架包,並導入項目中,如下: 二、創建log4j.prope

JavaIterator用法整理

mil rem println 對象 獲得 返回 new ext 插入 叠代器(Iterator)   叠代器是一種設計模式,它是一個對象,它可以遍歷並選擇序列中的對象,而開發人員不需要了解該序列的底層結構。叠代器通常被稱為“輕量級”對象,因為創建它的代價小。   Java

Javavector用法整理

遍歷 檢索 集合 ash ets toa java code lan ArrayList會比Vector快,他是非同步的,如果設計涉及到多線程,還是用Vector比較好一些 import java.util.*; /** * 演示Vector的使用。包括Vector的創

javaProperties類讀取properties屬性值

key ioe failed .cn pre new ava 進行 html 在項目的應用中,經常將一些配置放入properties文件中,在代碼應用中讀取properties文件,就需要專門的類Properties類,通過這個類可以進行讀取。 深入理解和學習的

JavaMath類的常用方法

order ref oat math dom ack ron 方法 args 8243 [java] view plain copy public class MathDemo { public static void main(

【本地資源路徑&&網絡資源路徑&&正反斜杠在Java用法

mage pow cnblogs 環境 而在 來看 pan 開始 命令行 一、概念和用法 左正右反 先來看看轉義字符的概念:通過 \ ,?來轉變後面字母或符號的含義。意思就是改變字母本身的含義。 以"\"符號為例,JAVA中有很多操作,例如文件操作等,需要用到路徑這個東