日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中 List、Set、Map遍历方式以及性能比较

發(fā)布時間:2023/12/13 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中 List、Set、Map遍历方式以及性能比较 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

  • 一、簡介
  • 二、遍歷方式
    • 1、ArrayList遍歷方式
      • (1)for循環(huán)遍歷
      • (2)foreach循環(huán)遍歷
      • (3)Iterator迭代器遍歷
    • 2、LinkedList遍歷方式
      • (1)for循環(huán)遍歷
      • (2)foreach循環(huán)遍歷
      • (3)Iterator迭代器遍歷
    • 3、HashSet遍歷方式
      • (1)foreach循環(huán)遍歷
      • (2)Iterator迭代器遍歷
    • 4、HashMap遍歷方式
      • (1)entrySet遍歷
      • (2)Iterator迭代器遍歷
    • 5、LinkedHashMap遍歷方式
      • (1)entrySet遍歷
      • (2)Iterator迭代器遍歷
  • 三、性能比較


一、簡介

List、Set 都繼承 Collection 接口,Map 不是。

  • List:元素有序存儲,元素可重復,取出來的順序可能和放入的順序不同,支持for循環(huán)和迭代器遍歷;

  • Set:元素無序存儲,且唯一,不能包含重復的元素,不支持for循環(huán)遍歷,支持迭代器遍歷;

  • Map:元素無序存儲,key值唯一不能重復,value值可重復,支持迭代器遍歷;

List、Set、Map實現(xiàn)類

  • List:ArrayList、LinkedList、Vector

  • Set:HashSet、TreeSet、LinkedHashSet

  • Map:HashMap、TreeMap、HashTable、LinkedHashMap

線程安全 / 線程不安全

  • 線程安全:Vector、HashTable

  • 線程不安全:ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、TreeMap、LinkedHashMap

下面我們只拿出 ArrayList、LinkedList、HashSet、HashMap、LinkedHashMap 來講解遍歷方式以及遍歷性能比較。



二、遍歷方式

1、ArrayList遍歷方式

ArrayList有三種遍歷方式:for循環(huán)遍歷、foreach循環(huán)遍歷、Iterator迭代器遍歷。


(1)for循環(huán)遍歷

ArrayList<String> lists = new ArrayList<String>(); for(int i=0;i<lists.size();i++){String line = lists.get(i); }

(2)foreach循環(huán)遍歷

ArrayList<String> lists = new ArrayList<String>(); for(String str : lists){String line = str; }

(3)Iterator迭代器遍歷

ArrayList<String> lists = new ArrayList<String>(); Iterator<String> iterator = lists.iterator(); while (iterator.hasNext()){String line = iterator.next(); }

2、LinkedList遍歷方式

LinkedList有三種遍歷方式:for循環(huán)遍歷、foreach循環(huán)遍歷、Iterator迭代器遍歷。


(1)for循環(huán)遍歷

LinkedList<String> lists = new LinkedList<String>(); for(int i=0;i<lists.size();i++){String line = lists.get(i); }

(2)foreach循環(huán)遍歷

LinkedList<String> lists = new LinkedList<String>(); for(String str : lists){String line = str; }

(3)Iterator迭代器遍歷

LinkedList<String> lists = new LinkedList<String>(); Iterator<String> iterator = lists.iterator(); while (iterator.hasNext()){String line = iterator.next(); }

3、HashSet遍歷方式

HashSet有兩種遍歷方式:foreach循環(huán)遍歷、Iterator迭代器遍歷。


(1)foreach循環(huán)遍歷

HashSet<String> hashSets = new HashSet<String>(); for(String str : hashSets){String line = str; }

(2)Iterator迭代器遍歷

HashSet<String> hashSets = new HashSet<String>(); Iterator<String> iterator = hashSets.iterator(); while (iterator.hasNext()){String line = iterator.next(); }

4、HashMap遍歷方式

HashMap有三種遍歷方式:keySet循環(huán)遍歷、entrySet遍歷、Iterator迭代器遍歷。

下面我們只講解 entrySet遍歷 和 Iterator迭代器遍歷。


(1)entrySet遍歷

HashMap<String, String> hashMaps = new HashMap<String, String>(); for(Map.Entry<String, String> entry : hashMaps.entrySet()){String line = entry.getKey(); }

(2)Iterator迭代器遍歷

HashMap<String, String> hashMaps = new HashMap<String, String>(); Iterator iterator = hashMaps.entrySet().iterator(); while (iterator.hasNext()){Map.Entry<String, String> entry = (Map.Entry<String, String>)iterator.next();String line = entry.getKey(); }

5、LinkedHashMap遍歷方式

LinkedHashMap有三種遍歷方式:keySet循環(huán)遍歷、entrySet遍歷、Iterator迭代器遍歷。

下面我們只講解 entrySet遍歷 和 Iterator迭代器遍歷 。


(1)entrySet遍歷

LinkedHashMap<String, String> linkedHashMaps = new LinkedHashMap<String, String>(); for(Map.Entry<String, String> entry : linkedHashMaps.entrySet()){String line = entry.getKey(); }

(2)Iterator迭代器遍歷

LinkedHashMap<String, String> linkedHashMaps = new LinkedHashMap<String, String>(); Iterator iterator = linkedHashMaps.entrySet().iterator(); while (iterator.hasNext()){Map.Entry<String, String> entry = (Map.Entry<String, String>)iterator.next();String line = entry.getKey(); }

三、性能比較

不同數(shù)量級的性能差異是比較大的,下面我們分別在30、100、1000、10000、100000數(shù)量級進行性能比較。

完整代碼如下:

package com.example.springbootdemo.util;import java.util.*;public class Test {public static void main(String[] args) {compare();}private static ArrayList<String> lists = new ArrayList<String>();private static LinkedList<String> linkedLists = new LinkedList<String>();private static HashSet<String> hashSets = new HashSet<String>();private static HashMap<String, String> hashMaps = new HashMap<String, String>();private static LinkedHashMap<String, String> linkedHashMaps = new LinkedHashMap<String, String>();private static void compare(){compareInit(100000);compare1();}private static void compareInit(int count){lists.clear();linkedLists.clear();hashMaps.clear();hashSets.clear();linkedHashMaps.clear();String str = "abcdefg_";String one = "";for(int i=0;i<count;i++){one = str + i;lists.add(one);linkedLists.add(one);hashSets.add(one);hashMaps.put(one, one);linkedHashMaps.put(one, one);}}private static final String listFor = "ArrayList for duration";private static final String listForeach = "ArrayList foreach duration";private static final String listIterator = "ArrayList Iterator duration";private static final String linkedListFor = "LinkedList for duration";private static final String linkedListForeach = "LinkedList foreach duration";private static final String linkedListIterator = "LinkedList Iterator duration";private static final String hashSetForeach = "HashSet foreach duration";private static final String hashSetIterator = "HashSet Iterator duration";private static final String hashMapEntry = "HashMap entry duration";private static final String hashMapIterator = "HashMap Iterator duration";private static final String linkedHashMapEntry = "LinkedHashMap entry duration";private static final String linkedHashMapIterator = "LinkedHashMap Iterator duration";private static void compare1(){for(int i=0;i<5;i++){System.out.println("------------------------------");listOne();listTwo();listThree();linkedListOne();linkedListTwo();linkedListThree();hashSetOne();hashSetTwo();hashMapOne();hashMapTwo();linkedHashMapOne();linkedHashMapTwo();System.out.println();}}private static void listOne(){String line = "";long start = System.nanoTime();for(int i=0;i<lists.size();i++){line = lists.get(i);}long end = System.nanoTime();print(start, end, listFor);}private static void listTwo(){String line = "";long start = System.nanoTime();for(String str : lists){line = str;}long end = System.nanoTime();print(start, end, listForeach);}private static void listThree(){String line = "";long start = System.nanoTime();Iterator<String> iterator = lists.iterator();while (iterator.hasNext()){line = iterator.next();}long end = System.nanoTime();print(start, end, listIterator);}private static void linkedListOne(){String line = "";long start = System.nanoTime();for(int i=0;i<linkedLists.size();i++){line = linkedLists.get(i);}long end = System.nanoTime();print(start, end, linkedListFor);}private static void linkedListTwo(){String line = "";long start = System.nanoTime();for(String str : linkedLists){line = str;}long end = System.nanoTime();print(start, end, linkedListForeach);}private static void linkedListThree(){String line = "";long start = System.nanoTime();Iterator<String> iterator = linkedLists.iterator();while (iterator.hasNext()){line = iterator.next();}long end = System.nanoTime();print(start, end, linkedListIterator);}private static void hashSetOne(){String line = "";long start = System.nanoTime();for(String str : hashSets){line = str;}long end = System.nanoTime();print(start, end, hashSetForeach);}private static void hashSetTwo(){String line = "";long start = System.nanoTime();Iterator<String> iterator = hashSets.iterator();while (iterator.hasNext()){line = iterator.next();}long end = System.nanoTime();print(start, end, hashSetIterator);}private static void hashMapOne(){String line = "";long start = System.nanoTime();for(Map.Entry<String, String> entry : hashMaps.entrySet()){line = entry.getKey();}long end = System.nanoTime();print(start, end, hashMapEntry);}private static void hashMapTwo(){String line = "";long start = System.nanoTime();Iterator iterator = hashMaps.entrySet().iterator();while (iterator.hasNext()){Map.Entry<String, String> entry = (Map.Entry<String, String>)iterator.next();line = entry.getKey();}long end = System.nanoTime();print(start, end, hashMapIterator);}private static void linkedHashMapOne(){String line = "";long start = System.nanoTime();for(Map.Entry<String, String> entry : linkedHashMaps.entrySet()){line = entry.getKey();}long end = System.nanoTime();print(start, end, linkedHashMapEntry);}private static void linkedHashMapTwo(){String line = "";long start = System.nanoTime();Iterator iterator = linkedHashMaps.entrySet().iterator();while (iterator.hasNext()){Map.Entry<String, String> entry = (Map.Entry<String, String>)iterator.next();line = entry.getKey();}long end = System.nanoTime();print(start, end, linkedHashMapIterator);}private static void print(long start, long end, String tip){System.out.println(tip + " = [" + ((double)((end - start)/1000))/1000 + "]ms");} }

我們經(jīng)過多輪測試,取相對合理的結果進行展示,單位為:毫秒(ms)

type30100100010000100000
ArrayList for0.0030.0080.0570.5190.674
ArrayList foreach0.0120.0090.0650.4950.632
ArrayList Iterator0.0100.0070.0740.4990.62
LinkedList for0.0310.0390.49864.04416374.155
LinkedList foreach0.0110.0120.0750.5261.989
LinkedList Iterator0.0080.0080.0680.5181.98
HashSet foreach0.0090.0250.0870.7541.955
HashSet Iterator0.0050.0110.0930.731.931
HashMap entrySet0.0120.0250.0920.9552.007
HashMap Iterator0.0090.0150.0820.9052.0
LinkedHashMap entrySet0.0160.0250.090.7192.596
LinkedHashMap Iterator0.0120.0130.0780.7042.46

單個類型不同遍歷方式性能比較總結:

  • ArrayList:三種遍歷方式性能差距不大,數(shù)量級較小時,for循環(huán)遍歷更優(yōu),數(shù)量級較大時,Iterator迭代器遍歷方式性能更優(yōu);

  • LinkedList:三種遍歷方式中for循環(huán)遍歷性能最差,其他兩種方式性能差距比較小,但是Iterator迭代器遍歷方式性能更優(yōu);

  • HashSet:兩種遍歷方式性能差距不大,但是Iterator迭代器遍歷方式性能更優(yōu);

  • HashMap:兩種遍歷方式性能差距不大,但是Iterator迭代器遍歷方式性能更優(yōu);

  • LinkedHashMap:兩種遍歷方式性能差距不大,但是Iterator迭代器遍歷方式性能更優(yōu);


整體性能比較總結:

  • 同等數(shù)量級,ArrayList的遍歷性能更優(yōu);
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結

以上是生活随笔為你收集整理的Java中 List、Set、Map遍历方式以及性能比较的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。