導航:首頁 > 編程語言 > collection遍歷java

collection遍歷java

發布時間:2023-07-13 06:57:06

A. java集合框架的知識總結

說明:先從整體介紹了Java集合框架包含的介面和類,然後昌平鎮IT培訓總結了集合框架中的一些基本知識和關鍵點,並結合實例進行簡單分析。

1、綜述

所有集合類都位於java.util包下。集合中只能保存對象(保存對象的引用變數)。(數組既可以保存基本類型的數據也可以保存對象)。

當我們把一個對象放入集合中後,系統會把所有集合元素都當成Object類的實例進行處理。敬碰前從JDK1.5以後,這種狀態得到了改進:可以使用泛型來限制集合里元素的類型,並讓集合記住所有集合元素的類型(參見具體泛型的內容)。


Java的集合類主要由兩個介面派生而出:Collection和Map,Collection和Map是Java集合框架的根介面,這兩個介面又包含了一些介面或實現類。


Set、List和Map可以看做集合的三大類。

List集合是有序集合,集合中的元素可以重復,訪問集合中的元素可以根據元素的索引來訪問。

Set集合是無序集合,集合中的元素不可以重復,訪問集合中的元素只能根據元素本身來訪問(也是不能集合里元素不允許重復的原因)。

Map集合中保存Key-value對形式的元素,訪問時只能根據每項元素的key來訪問其value。


對於Set、List和Map三種集合,最常用的實現類分別是HashSet、ArrayList和HashMap三個實現類。(並發控制的集合類,以後有空研究下)。


2、Collection介面

Collection介面是List、Set和Queue介面的父介面,同時可以操作這三個介面。亮清

Collection介面定義操作集合元素的具體方法大家可以參考API文檔,這里通過一個例子來說明Collection的添加元素、刪除元素、返回集合中元素的個數以及清空集合元素的方法。


3、兩種遍歷集合的方法Iterator介面和foreach循環1、Iterator介面

Iterator也是Java集合框架的成吵鎮員,主要用於遍歷(即迭代訪問)Collection集合中的元素,也稱為迭代器。


B. Java List遍歷方法及其效率對比

Java代碼

package zbalpha test;

差州吵 import java util ArrayList;

import java util Iterator;

import java util List;

public class ListTest {

public static void main(String args[]){

跡世 List<Long> lists = new ArrayList<Long>();

for(Long i= l;i< l;i++){

lists add(i);

}

Long oneOk = oneMethod(lists);

Long oOk = oMethod(lists);

Long threeOk = threeMethod(lists);

Long fourOk = fourMethod(lists);

System out println( One: + oneOk);

System out println( Two: + oOk);

System out println( Three: + threeOk);

System out println( four: + fourOk);

}

public static Long oneMethod(List<Long> lists){

Long timeStart = System currentTimeMillis();

for(int i= ;i<lists size();i++) {

System out println(lists get(i));

}

Long timeStop = System currentTimeMillis();

return timeStop timeStart ;

}

public static Long oMethod(List<Long> lists){

Long timeStart = System currentTimeMillis();

for(Long string : lists) {

System out println(string);

}

Long timeStop = System currentTimeMillis();

return timeStop timeStart ;

}

public static Long threeMethod(List<Long> lists){

Long timeStart = System currentTimeMillis();

Iterator<Long> it = erator();

while (it hasNext())

{

虛侍 System out println(it next());

}

Long timeStop = System currentTimeMillis();

return timeStop timeStart ;

}

public static Long fourMethod(List<Long> lists){

Long timeStart = System currentTimeMillis();

for(Iterator<Long> i = erator(); i hasNext();) {

System out println(i next());

}

Long timeStop = System currentTimeMillis();

return timeStop timeStart ;

}

}

容器類可以大大提高編程效率和編程能力 在Java 中 所有的容器都由SUN公司的Joshua Bloch進行了重新設計 豐富了容器類庫的功能

Java 容器類類庫的用途是 保存對象 它分為兩類

Collection 一組獨立的元素 通常這些元素都服從某種規則 List必須保持元素特定的順序 而Set不能有重復元素

Map 一組成對的 鍵值對 對象 即其元素是成對的對象 最典型的應用就是數據字典 並且還有其它廣泛的應用 另外 Map可以返回其所有鍵組成的Set和其所有值組成的Collection 或其鍵值對組成的Set 並且還可以像數組一樣擴展多維Map 只要讓Map中鍵值對的每個 值 是一個Map即可

迭代器

迭代器是一種設計模式 它是一個對象 它可以遍歷並選擇序列中的對象 而開發人員不需要了解該序列的底層結構 迭代器通常被稱為 輕量級 對象 因為創建它的代價小

Java中的Iterator功能比較簡單 並且只能單向移動

( ) 使用方法iterator()要求容器返回一個Iterator 第一次調用Iterator的next()方法時 它返回序列的第一個元素

( ) 使用next()獲得序列中的下一個元素

( ) 使用hasNext()檢查序列中是否還有元素

( ) 使用remove()將迭代器新返回的元素刪除

Iterator是Java迭代器最簡單的實現 為List設計的ListIterator具有更多的功能 它可以從兩個方向遍歷List 也可以從List中插入和刪除元素

List的功能方法

List(interface): 次序是List最重要的特點 它確保維護元素特定的順序 List為Collection添加了許多方法 使得能夠向List中間插入與移除元素(只推薦 LinkedList使用) 一個List可以生成ListIterator 使用它可以從兩個方向遍歷List 也可以從List中間插入和刪除元素

ArrayList: 由數組實現的List 它允許對元素進行快速隨機訪問 但是向List中間插入與移除元素的速度很慢 ListIterator只應該用來由後向前遍歷ArrayList 而不是用來插入和刪除元素 因為這比LinkedList開銷要大很多

LinkedList: 對順序訪問進行了優化 向List中間插入與刪除得開銷不大 隨機訪問則相對較慢(可用ArrayList代替) 它具有方法addFirst() addLast() getFirst() getLast() removeFirst() removeLast() 這些方法(沒有在任何介面或基類中定義過)使得LinkedList可以當作堆棧 隊列和雙向隊列使用

Set的功能方法

Set(interface): 存入Set的每個元素必須是唯一的 因為Set不保存重復元素 加入Set的Object必須定義equals()方法以確保對象的唯一性 Set與Collection有完全一樣的介面 Set介面不保證維護元素的次序

HashSet: 為快速查找而設計的Set 存入HashSet的對象必須定義hashCode()

TreeSet: 保持次序的Set 底層為樹結構 使用它可以從Set中提取有序的序列

LinkedHashSet: 具有HashSet的查詢速度 且內部使用鏈表維護元素的順序(插入的次序) 於是在使用迭代器遍歷Set時 結果會按元素插入的次序顯示

lishixin/Article/program/Java/hx/201311/26494

C. java里set list 為什麼能遍歷集合

list和set集合是java中最常見的兩種數據結構,都是Collection的子集,今天就簡單的說說他們兩者的遍歷以及相互轉化吧。

一、list的遍歷

有三種遍歷方法:
/**
* list的三種遍歷
* @author Owner
*
*/
public class ListTest {

public static void main(String[] args) {

List<String> list = new ArrayList<String>();

list.add("a");
list.add("b");
list.add("c");
list.add("c");//可添加重復數據

//遍歷方法一 迭代器
for(Iterator<String> iterator = list.iterator();iterator.hasNext();){
String value = iterator.next();

System.out.println(value);
}

//遍歷方法二 超級for循環
for(String value : list){
System.out.println(value);
}

//遍歷方法三
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}

}
}

分析一下這三種遍歷吧,第一種迭代器的遍歷,執行過程中會進行數據鎖定,性能上是安全的,效率較低;
第二種,是java新語法,增強型for循環,其中內部也是調用了迭代器;
第三種,直接使用取數組的方式,效率最快,但會有多線程安全問題。
原理如下:
ArrayList底層是採用數組來保存數據的,對於訪問數組里的數據來說,直接採用數組索引當然是最快的了,相當於直接從內存讀取數據,其他的兩種迭代方式,實際上都是一種,即iterator,foreach包裝了一下;iterator遍歷最終還是要通過索引來訪問數據,源碼中對應的get方法了。

Set的遍歷和List類似,由於set沒有get方法,所有第三種是不可以的;
總結:綜合考慮使用第二種,增強型for循環就可以

二、List和Set相互轉化:
這個需求一般也不多,直接上代碼吧:
/**
* List和Set的轉化(Set轉化成List)
*/
public static <T> List<T> SetToList(Set<T> set) {
List<T> list = new ArrayList<>();
list.addAll(set);
return list;
}
使用泛型實現。不過值得注意的是,list轉化成set會丟失數據,重復數據會丟失。

閱讀全文

與collection遍歷java相關的資料

熱點內容
如何把iphoneapp變小 瀏覽:130
一個後端程序員的日常 瀏覽:416
51單片機歷史 瀏覽:890
怎樣減小pdf文件大小 瀏覽:31
和彩雲zip解壓 瀏覽:725
linux查看線程狀態 瀏覽:459
怎麼起文件夾名稱 瀏覽:49
北京交大編譯原理 瀏覽:982
linux執行java腳本 瀏覽:589
全能掃描加密文檔忘記密碼怎麼辦 瀏覽:75
極品飛車ol安卓版為什麼要關服 瀏覽:275
學生伺服器怎麼選 瀏覽:464
mac系統本身編譯器 瀏覽:151
頭條app如何設置橫屏模式 瀏覽:359
clion怎麼使用終端編譯 瀏覽:768
伺服器地址部署到公網 瀏覽:494
新桑塔納安卓大屏導航怎麼拆 瀏覽:384
程序員送給女友的禮物 瀏覽:434
ftp命令行查看文件數量 瀏覽:508
linux查看設備的命令 瀏覽:839