一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java優化for循環嵌套的高效率方法

Java優化for循環嵌套的高效率方法

2020-09-15 01:12laosun Java教程

這篇文章主要介紹了Java優化for循環嵌套的高效率方法,幫助大家更好的提升java程序性能,感興趣的朋友可以了解下

前幾天有人問過我一個問題,就是兩個嵌套for循環執行效率的問題,問有什么好的辦法替換。當時我想了想,實在想不起來,哎,慚愧!!! 請教了答案,恍然大悟。

比如:兩個list中分別裝有相同的對象數據。 list1中有3萬條對象數據。 list2中有2萬條對象數據(但是對象中的某個屬性變量為空)。兩個list中的id或者其他變量都一模一樣。請用最快的方式找出list2中變量為空的那個對象,并且去list1中找出id相同的對象。 或者可以理解成,從list2中找出變量為空的,去list1中找出對應的對象,然后把為空的列補上。總之就是這么一個意思,先 for 循環 list2,判斷一下每個對象的那個屬性變量是否為空,如果為空,再去for循環list1,找出id一樣的對象,就算執行成功了。

那么請看下邊的for循環嵌套的解決方式:

?
1
2
3
4
5
6
7
8
9
for(Member m2:list2){
 if(m2.getName()==null){
 for(Member m1:list1){
  if(m1.getId().intValue()==m2.getId().intValue()){
  System.out.println(m2.getId()+" Name 值為空!!!");
  }
 }
 }
}

這樣真的好嗎? 如果有上萬,甚至十幾萬的數據,那么這個執行效率問題,我就不多說了。 非常非常的慢。

下邊來看使用map代替的執行方式,以及兩種方式的效率對比:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
 
class Member {
 private Integer id;
 private String name;
 private Integer age;
 private Date addDate;
 
 public Member() {
 }
 
 public Member(Integer id, String name, Integer age, Date addDate) {
 super();
 this.id = id;
 this.name = name;
 this.age = age;
 this.addDate = addDate;
 }
 
 public Integer getId() {
 return id;
 }
 
 public void setId(Integer id) {
 this.id = id;
 }
 
 public String getName() {
 return name;
 }
 
 public void setName(String name) {
 this.name = name;
 }
 
 public Integer getAge() {
 return age;
 }
 
 public void setAge(Integer age) {
 this.age = age;
 }
 
 public Date getAddDate() {
 return addDate;
 }
 
 public void setAddDate(Date addDate) {
 this.addDate = addDate;
 }
 
}
 
public class For2 {
 
 public static void main(String[] args) throws InterruptedException {
 List<Member> list1 = new ArrayList<>();
 List<Member> list2 = new ArrayList<>();
 for(int i=0;i<30000;i++){
  Date date = new Date();
  list1.add(new Member((i+1),"技術客",(i+1), date));
  if(i%2==0){
  list2.add(new Member((i+1),null,(i+1), date));
  }
 }
  
 //雙for循環嵌套測試
 long s1 = System.currentTimeMillis();
 int forNumber = 0;
 for(Member m2:list2){
  if(m2.getName()==null){
  for(Member m1:list1){
   if(m1.getId().intValue()==m2.getId().intValue()){
//   System.out.println(m2.getId()+" Name 值為空!!!");
   forNumber++;
   }
  }
  }
 }
 long s2 = System.currentTimeMillis();
 System.out.println("雙for循環查詢時間為:"+(s2-s1)+"(毫秒),一共查詢出"+forNumber+"條數據 \n\n\n");
 TimeUnit.SECONDS.sleep(3);
  
 //map查詢測試
 long s3 = System.currentTimeMillis();
  
 int mapNumber = 0;
 Map<Integer, Member> map = new HashMap<>();
 for(Member m1:list1){
  map.put(m1.getId(), m1);
 }
 for(Member m2:list2){
  if(m2.getName()==null){
  Member m = map.get(m2.getId());
  if(m!=null){
//   System.out.println(m2.getId()+" Name 值為空!!!");
   mapNumber++;
  }
  }
 }
 long s4 = System.currentTimeMillis();
 System.out.println("使用map結構查詢時間為:"+(s4-s3)+"(毫秒),一共查詢出"+mapNumber+"條數據 \n\n\n");
 }
 
}

輸出結果:

雙for循環查詢時間為:1578(毫秒),一共查詢出15000條數據



使用map結構查詢時間為:14(毫秒),一共查詢出15000條數據

如果我們模擬10萬條數據,然后其中五千條重復數據的情況下:效率更是天壤之別。

看輸出結果:

雙for循環查詢時間為:30929(毫秒),一共查詢出50000條數據



使用map結構查詢時間為:24(毫秒),一共查詢出50000條數據

循環數據越小,兩者差別也就越小,但是數據量越大,差別也就越大。 10萬條數據的差別竟然達到上千倍!

以上就是Java優化for循環嵌套的高效率方法的詳細內容,更多關于Java 優化 for循環的資料請關注服務器之家其它相關文章!

原文鏈接:https://www.sunjs.com/article/detail/2932f6f6d7aa4da089dcf558f0629d97.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美日韩一区二区综合在线视频 | 亚州人成网在线播放 | h版欧美大片免费观看 | 免费视频完整版在线观看网站 | 天堂a视频 | 羞羞麻豆国产精品1区2区3区 | 国产高清视频一区二区 | 欧美黑人一级 | 亚洲精品动漫免费二区 | 精品国产人妻国语 | 五月一区二区久久综合天堂 | 久久伊人电影 | 火影小南被爆羞羞网站进入 | www.四虎影| 四虎影视色费永久在线观看 | 国产亚洲小视频 | 2015台湾永久免费平台 | 青草社区视频 | 日韩欧美亚洲国产高清在线 | 女同videos双性人 | 大伊香蕉精品视频一区 | 国产一卡二卡3卡4卡四卡在线 | 大又大又粗又爽女人毛片 | 亚洲成人网页 | 99久久精品国产综合一区 | 3d蒂法精品啪啪一区二区免费 | 免费特黄一区二区三区视频一 | 欧美成人影院免费观 | 亚洲天堂999 | 欧美18一19性高清hd4k | 日产精品视频 | 情趣内衣情趣玩具play | 青青青青久久国产片免费精品 | 国产麻豆剧果冻传媒观看免费视频 | 福利一区福利二区 | 日韩欧美一区黑人vs日本人 | 国产精品久久久久久 | 国产真实偷乱视频在线观看 | 日本三级香港三级久久99 | 国产一级片免费观看 | 国产东北3p真实在线456视频 |