1. 程式人生 > >使用兩個for迴圈的時候,會非常慢,效率不高,使用構造字典,效率快了不少一點點!

使用兩個for迴圈的時候,會非常慢,效率不高,使用構造字典,效率快了不少一點點!

假如有兩張表t1和t2,t1是屬性是id name,t2是id  sex。兩張表id是關聯的。假如有兩個集合,C1和C2,C1存著T1的資料,C2存著T2的資料。

此時我們想,將C1和C2的資料整合到一起變成新的物件,屬性為id ,name,sex。

一般我們都會使用for(){for(){}}兩個for巢狀,這種效率是很慢的,如果集合是10條資料,則會需要遍歷10*10=100次。

這是後,我們會使用構造字典。

首先,用C1為例,我們不要用list而是使用Map

Map<String,Object> dimensionMap=new HashMap();
for(int i=0;i<dimensionList.size();
i++){ ErpDimensionUpdate dimensionUpdate=(ErpDimensionUpdate) dimensionList.get(i); dimensionMap.put(dimensionUpdate.getItemName(),dimensionUpdate); }

String存放id,Object存放物件
for(int i=0;i<productList.size();i++){
    AddProdWeight addProdWeight=(AddProdWeight) productList.get(i);
ErpDimensionUpdate dimensionUpdate=(ErpDimensionUpdate) dimensionMap.get(addProdWeight.getProdNum());
addProdWeight.setUnitWgt(Integer.parseInt(dimensionUpdate.getReference2())); addList.add(addProdWeight);
通過Map的key,我們能很快找到物件,並給其賦值,假如10條資料,我們總共只需要遍歷20次,這樣效率就很高。

相關推薦

使用for迴圈的時候非常效率使用構造字典效率不少點點

假如有兩張表t1和t2,t1是屬性是id name,t2是id  sex。兩張表id是關聯的。假如有兩個集合,C1和C2,C1存著T1的資料,C2存著T2的資料。 此時我們想,將C1和C2的資料整合到一起變成新的物件,屬性為id ,name,sex。 一般我們都會使用for

for迴圈巢狀二維陣列

將指令碼erweishuzu掛在Main Camera上 using UnityEngine; using System.Collections; using UnityEngine.UI; pu

完全揹包----for迴圈的先後問題

這篇文章主要是講完全揹包問題中,什麼情況下兩個for迴圈的位置不能交換。 在點選開啟連結(完全揹包問題----思想的理解)中我們提到,完全揹包一維陣列的實現的兩個for迴圈是可以交換順序的。 虛擬碼分別如下所示: 方式一:《揹包九講》基於01揹包問題推匯出來的,還記得和

利用MAP存數據防止超時開始用for 循環CodeForces - 702B

開始 def cout += -cp CI ace sin com #include<bits/stdc++.h> using namespace std; map <int,int> M; long long ans; int main()

4.用while和for迴圈輸出1到100之間能被5整除的數且每行輸出3

用while和for迴圈輸出1到100之間能被5整除的數,且每行輸出3個。 /** * [說明]:用while和for迴圈輸出1到100之間能被5整除的數,且每行輸出3個。 * @author aeon */ public class TestWhileFor { public stat

部署在同一臺機器的不同應用應用的cookie互相影響的問題(如果做登入攔截導致已登入的應用需要重新登入)

2018年5月29日記    今天在解決專案的bug時發現的一個問題,我們有兩個系統:許可權管理系統(簡稱系統A)、前臺展示系統(簡稱系統B),發現系統A在登入的情況下,如果在開啟一個頁面登入系統B,再回到系統A訪問時會跳轉到登入頁重新登入,導致的結果系統A與系統B不能同時登

雅虎面試題─有雙向迴圈連結串列AB知道其頭指標為:pHeadA,pHeadB請寫函式將連結串列中data值相同的結點刪除

有雙向迴圈連結串列結點定義為: struct node {    int data;   struct node *front,*next; }; 有兩個雙向迴圈連結串列A,B,知道其頭指標為:pHeadA,pHeadB,請寫一函式將兩連結串列中data值相同的結點刪

java 已知地點經緯度算距離 非常精確

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

寫一個函式返回引數二進位制中1的個數+獲取個數二進位制序列中所有的偶數位和奇數位分別輸出二進位制序列+輸出一個整數的每位+兩個int(32位)整數m和n的二進位制表達中有多少個位(bit)不同

寫一個函式返回引數二進位制中 1 的個數 比如: 15 0000 1111 4 個 1 #include <stdio.h> #include <windows.h> /* 寫一個函式統計一個數二進位制形式下 1 的個數 */ //統計 1 的個數 int C

C語言實現 int(32位)整數m和n的二進位制表達中有多少個位(bit)不同?

輸入例子: 1999 2299 輸出例子:7 int main() { int a = 0; int b = 0; int num = 0; int count = 0; printf("請輸入兩個整數:"); scanf("%d%d",&a,&b); n

使用異或運算交換變數位置的演算法非常

看了很多程式設計方面的知識,在慕課網上的一個關於二進位制的視訊中,偶然聽見老師說採用異或運算的方法交換兩個數字的順序可以提高效率,原因是位運算是直接對二進位制位進行運算,而二進位制位更接近底層。 因此,我一直信誓旦旦的給朋友們普及異或運算的高效率,直到被別人反駁之後,我去網上搜了很多相關的文章。

JS的三for迴圈

迴圈可以將程式碼塊執行指定的次數。   for迴圈:for (語句 1; 語句 2; 語句 3) { 被執行的程式碼塊 }   語句 1 在迴圈(程式碼塊)開始前執行   語句 2 定義執行迴圈(程式碼塊)的條件   語句 3 在迴圈(

埠號相同的系統同時登入退出前面登入的

在web.xml裡面加    <session-config>     <cookie-config>     <name>archivesSessionId</name>     </cookie-config>

1.程式設計實現: int(32位)整數m和n的二進位制表達中 有多少個位(bit)不同? 輸入例子: 1999 2299 輸出例子:7

方法一: 演算法思想:由於要找兩個數對應不同位元位的個數,可以先將兩個數按位異或,然後再統計異或後的數中的一的個數,而統計二進位制中1的個數有三種方法;1.這個數迴圈按位 於比它小1的數,直到這個數為0為止;2.把這個數的每一個二進位制位拿出來,用的方法是和1相與,移位,迴

問:我使用git clone git://git.videolan.org/vlc.git vlc下載非常怎麼改善?

【問】:我使用git clone git://git.videolan.org/vlc.git vlc,下載非常慢,怎麼改善? 【答】:由於主站伺服器在國外,下載非常慢,這是正常的。通常,你需要耐心等待! 其實,下載慢,也並非沒有方法改善。比如,你可以從映象站點下載vlc的

解決viewpager中item迴圈左右滑動出現崩潰問題

在 instantiateItem()方法中 新增如下程式碼  @Override            public Object instantiateItem(ViewGroup container, int position) {            View v

藍橋杯題目 輸入整數a和b輸出這整數的和。a和b都超過100位。

問題描述   輸入兩個整數a和b,輸出這兩個整數的和。a和b都不超過100位。 演算法描述   由於a和b都比較大,所以不能直接使用語言中的標準資料型別來儲存。對於這種問題,一般使用陣列來處理。

【C語言】int(32位)整數m和n的二進位制表達中有多少個位(bit)不同

根據異或我們可以知道,兩個數字的二進位制位按位異或,相同為0,相異為1。 因此我們可以通過將兩個數字按位異或,並計算該異或結果中二進位制位中1的個數,即可知道有多少個位元位不同。 int count(int a, int b) { int m = a ^ b; // 兩個數按位異或,對應不

檔案關閉後馬上再開啟另一個檔案控制代碼一樣

for(int i = 0; i < 5; i++) { FILE *pF = fopen("123.txt", "wb"); printf("%x\n", pF); fclose(pF); p

for迴圈的實質

第一種:實質上就是一個迭代器, 在遍歷過程中修改元素值, 會報錯java.util.ConcurrentModificationException, 這是因為迭代器中有引數expectModCount:預期被修改的次數  來做併發安全的控制 HashSet<Strin