java集合的遍历_Java集合之遍历
在Java開發中,集合,可以說使我們必然要使用到的一個框架。對集合的遍歷也是我么經常要進行的操作,而遍歷操作又有多種,下面就對集合遍歷進行以下總結。
一、List、Set的遍歷
List與Set都繼承了Collection接口,從某種程度上來說可以將List和Set看作同一種類型,因此對于他們的遍歷方式也是相同的。
下面以List為例進行講述
List lists = new ArrayList<>();
lists.add("A");
lists.add("B");
lists.add("C");
lists.add("D");
lists.add("E");
lists.add("F");
方式一:
普通for循環
for (int i = 0; i < lists.size(); i++){
System.out.println(lists.get(i));
}
當然這種方式對于Set集合是不適用的,因為Set集合中并沒有get index方法。
方式二:
for-each循環
for(String s : lists){
System.out.println(s);
}
對于這種方式的遍歷,是會存在一些問題的。首先,每次遍歷集合類時,都需要寫很多樣板代碼,對遍歷進行改造也很麻煩,需要修改每一個for循環。并且這樣做也模糊了代碼的本意,需閱讀完整個循環體才能理解這段代碼的意圖,無形當中增加了時間成本。
方式三:
使用Iterator外部迭代
Iterator iterator = lists.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
方式四:
使用Iterator迭代
for (Iterator iterator = lists.iterator(); iterator.hasNext();)
{
String string = (String) iterator.next();
}
實際上方式四和方式三是類似的,區別只不過是方式三使用while循環,方式四使用for循環。
并且從內部來說方式二(for-each循環)與方式三、方式四(Iterator遍歷)其實是相同的,屬于外部迭代,只是形式不同。for-each其實是一個封裝了迭代的語法糖。
但從性能上來說,使用Iterator性能會更好些。
總體上說,無論是for-each循環還是迭代器遍歷都會將行為和方法混為一談,很難抽象出各種不同的操作。
方式五:
Stream內部迭代
List lists = new ArrayList();
lists.add("A");
lists.add("B");
lists.add("Ct");
lists.add("Dt");
lists.add("Et");
lists.add("Ft");
long count = lists.stream().filter(new Predicate(){
@Override
public boolean test(String t){
return t.endsWith("t");
}
}).count();
System.out.println(count);
在這里我們過濾出以"t"結尾的字符串,并打印出這樣字符串的個數。
這是Java8新出來的一個類,Stream使用函數式編程的方式在集合類上進行復雜操作的工具。我們可以通過這種流機制、Stream類中的各種操作符以及Java中的函數接口去做任何我們想做的事情,并且代碼的可讀性也大大提高。
二、Map的遍歷
Map maps = new HashMap();
maps.put(1, "A");
maps.put(2, "B");
maps.put(3, "C");
maps.put(4, "D");
maps.put(5, "E");
方式一:
for-each單獨遍歷key和value
//遍歷keys
for(Integer key : maps.keySet()){
System.out.println(key);
}
//遍歷values
for(String value : maps.values()){
System.out.println(value);
}
方式二:
先遍歷keys,然后通過key查找值
for(Integer key : maps.keySet()){
String value = maps.get(key);
System.out.println(key+":"+value);
}
方式三:
通過Entry進行遍歷
for (Map.Entry entry : maps.entrySet()){
Integer key = entry.getKey();//獲取key
String value = entry.getValue();//獲取value
System.out.println(key + ":" + value);
}
方式四:
使用迭代器進行遍歷
Iterator> iterator = maps.entrySet().iterator();
while (iterator.hasNext()){
Map.Entry entry = iterator.next();
Integer key = entry.getKey();//獲取key
String value = entry.getValue();//獲取value
}
四種遍歷方式的比較
在這四種方式中,方式二是效率最低的一種方式,因為從從鍵取值的get方法是耗時的操作,所以并不推薦使用此方式。
方式一在性能上比方式三要好一些,并且方式一的代碼更加干凈易讀。
在性能方面,方式四與方式一可以說是相同的。
總結
以上是生活随笔為你收集整理的java集合的遍历_Java集合之遍历的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单链表的代码python_python版
- 下一篇: android 获取monkey日志_安