更新時間:2021-05-20 11:14:28 來源:動力節(jié)點 瀏覽1593次
Iterator it = list.iterator();
while(it.hasNext()) {
Object obj = it.next();
}
1.通過獲取所有的key按照key來遍歷
//Set<Integer> set = map.keySet(); //得到所有key的集合
for (Integer in : map.keySet()) {
String str = map.get(in);//得到每個key多對用value的值
}
2.通過Map.entrySet使用iterator遍歷key和value
Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Integer, String> entry = it.next();
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
3.通過Map.entrySet遍歷key和value,推薦,尤其是容量大時
for (Map.Entry<Integer, String> entry : map.entrySet()) {
//Map.entry<Integer,String> 映射項(鍵-值對) 有幾個方法:用上面的名字entry
//entry.getKey() ;entry.getValue(); entry.setValue();
//map.entrySet() 返回此映射中包含的映射關系的 Set視圖。
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
4.通過Map.values()遍歷所有的value,但不能遍歷key
for (String v : map.values()) {
System.out.println("value= " + v);
}
第一種:
for(Iterator iterator = list.iterator();iterator.hasNext();){
int i = (Integer) iterator.next();
System.out.println(i);
}
第二種:
Iterator iterator = list.iterator();
while(iterator.hasNext()){
int i = (Integer) iterator.next();
System.out.println(i);
}
第三種:
for (Object object : list) {
System.out.println(object);
}
第四種:
for(int i = 0 ;i<list.size();i++) {
int j= (Integer) list.get(i);
System.out.println(j);
}
主要有2種存儲方式:
1.順序存儲,Random Access(Direct Access):
這種方式,相鄰的數(shù)據(jù)元素存放于相鄰的內存地址中,整塊內存地址是連續(xù)的??梢愿鶕?jù)元素的位置直接計算出內存地址,直接進行讀取。讀取一個特定位置元素的平均時間復雜度為O(1)。正常來說,只有基于數(shù)組實現(xiàn)的集合,才有這種特性。Java中以ArrayList為代表。
2.鏈式存儲,Sequential Access:
這種方式,每一個數(shù)據(jù)元素,在內存中都不要求處于相鄰的位置,每個數(shù)據(jù)元素包含它下一個元素的內存地址。不可以根據(jù)元素的位置直接計算出內存地址,只能按順序讀取元素。讀取一個特定位置元素的平均時間復雜度為O(n)。主要以鏈表為代表。Java中以LinkedList為代表。
每個遍歷方法的實現(xiàn)原理是什么?
1.傳統(tǒng)的for循環(huán)遍歷,基于計數(shù)器的:
遍歷者自己在集合外部維護一個計數(shù)器,然后依次讀取每一個位置的元素,當讀取到最后一個元素后,停止。主要就是需要按元素的位置來讀取元素。
2.迭代器遍歷,Iterator:
每一個具體實現(xiàn)的數(shù)據(jù)集合,一般都需要提供相應的Iterator。相比于傳統(tǒng)for循環(huán),Iterator取締了顯式的遍歷計數(shù)器。所以基于順序存儲集合的Iterator可以直接按位置訪問數(shù)據(jù)。而基于鏈式存儲集合的Iterator,正常的實現(xiàn),都是需要保存當前遍歷的位置。然后根據(jù)當前位置來向前或者向后移動指針。
3.foreach循環(huán)遍歷:
根據(jù)反編譯的字節(jié)碼可以發(fā)現(xiàn),foreach內部也是采用了Iterator的方式實現(xiàn),只不過Java編譯器幫我們生成了這些代碼。
以上就是動力節(jié)點小編介紹的"Java集合遍歷的幾種方式",希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為您服務。