您好,登錄后才能下訂單哦!
這篇文章主要講解了“JDK8 Stream性能介紹”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“JDK8 Stream性能介紹”吧!
在編寫代碼時,想用jdk8的stream替換以前的for循環,代碼如下:
//for方法 Set<String> keys = Sets.newHashSetWithExpectedSize(list.size()); for (T data : list) { keys.add(getWrapRedisKey(data)); } //stream方法 Set<String> keys = list.stream().map(this::getWrapRedisKey).collect(Collectors.toSet());
stream
可以非常優雅的一行代碼就解決,而for
則需要三行代碼,生產力大大提高。
但是for
循環可以實現初始化容量,這在頻繁add
觸發rehash
、鏈表轉紅黑樹
時,能大大提高性能,那么stream
的api
的Collectors.toSet
方法有沒有設置初始化容量。
查看源碼:
Talking is cheap,show me the code
簡單寫了一個測試代碼
public static void main(String[] args) { int expectSize = 100000; List<String> source = generateData(expectSize); long start = System.currentTimeMillis(); testFor(source); //testStream(source); System.out.println(System.currentTimeMillis() - start); } private static void testFor(List<String> source) { Set<String> sets = Sets.newHashSetWithExpectedSize(source.size()); for (String s : source) { sets.add(s); } } private static void testStream(List<String> source) { source.stream().collect(Collectors.toSet()); } private static List<String> generateData(int size) { List list = Lists.newArrayListWithCapacity(size); for(int i = 1; i <= size; i++) { list.add(UUIDUtils.generateId()); } return list; }
結果是10w數據是,for比stream快2-3倍...
在數據量比較大,同時要求相應時間場景下,應該還是使用for或者在使用stream前預設集合容量。
感謝各位的閱讀,以上就是“JDK8 Stream性能介紹”的內容了,經過本文的學習后,相信大家對JDK8 Stream性能介紹這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。