2012-05-23 36 views
0

嗨,我在兩個列表中使用常見字符。
這是我的代碼。在兩個字符串列表中獲取常用字符串對

public static int getMatchCount(List<String> listOne, List<String> listTwo) { 
    String valueOne = ""; 
    String valueTwo = ""; 
    int matchCount = 0; 
    boolean isMatchedOnce=false; 

    for (int i = 0; i < listOne.size(); i++) { 
     valueOne = listOne.get(i); 
     isMatchedOnce=false; 
     if (StringUtils.isBlank(valueOne)) 
      continue; 

     for (int j = 0; j < listTwo.size(); j++) { 
      valueTwo = listTwo.get(j); 
      if (StringUtils.isBlank(valueTwo)) 
       continue; 

      if (valueTwo.equals(valueOne) && (!isMatchedOnce)) { 
       matchCount++; 
       listOne.set(i, ""); 
       listTwo.set(j, ""); 
       isMatchedOnce=true; 
      } 
     } 
    } 
    return matchCount; 
} 


    for ex 
listone listTwo 
A   A 
A   B 
B 

然後結果爲2不是3
由於它們是僅有的兩個共同對我們可以取出。

但方法很慢任何改進以上方法使其更快。

+1

你想要統計兩個列表中的公共元素。我對嗎? – sgowd

回答

4

這應該是一個更簡單的解決辦法:

List<String> listOne = new ArrayList<String>(); 
//add elements 
List<String> listTwo= new ArrayList<String>(); 
//add elements 
List<String> commonList = new ArrayList<String>(listTwo); 
commonList.retainAll(listOne); 
int commonListSize = commonList.size(); 
+0

謝謝,我明白了.. – Abhij

2

使用臨時徵收中的addAll()中的retainAll():

Set<String> set = new HashSet<String>(); 
set.addAll(list1); 
set.retainAll(list2); 
int count = set.size(); 
+0

好的十字路口! –

0

也許你可以試試這個...

public static int getMatchCount(List<String> listOne, List<String> listTwo) { 
    String valueOne; 
    String valueTwo; 
    int matchCount = 0; 
    boolean isMatchedOnce; 

    //for (int i = 0; i < listOne.size(); i++) { 
    for(String i : listOne){ 
     valueOne = i; 
     isMatchedOnce = false; 
     if (StringUtils.isBlank(valueOne)) { 
      continue; 
     } 

     for (String j : listTwo) { 
      valueTwo = j; 
      if (StringUtils.isBlank(valueTwo)) { 
       continue; 
      } 

      if (valueTwo.equals(valueOne) && (!isMatchedOnce)) { 
       matchCount++; 
       listOne.set(listOne.indexOf(i), ""); 
       listTwo.set(listOne.indexOf(j), ""); 
       isMatchedOnce = true; 
      } 
     } 
    } 
    return matchCount; 
} 
相關問題