2013-02-08 108 views
1
String isoArray[] = {"020","784","004","028"}; 

if(!("020".equals(element[2]) || "784".equals(element[2]) || "004".equals(element[2]) || "028".equals(element[2]))){ 
      country a = new country(element[4], element[5], element[7]); 
      countries.add(a); 
} 

是否有比較這些字符串而不使用循環的更簡單方法?Java - 比較數組數值

+4

循環出了什麼問題。理解你的理由可能有助於解答。 – MadcoreTom

+0

if語句中的嚴重比較被認爲是一種不好的做法。這是如此醜陋,容易出錯,難以閱讀。你總是有更好的方法來實現相同的目標。 – Drogba

回答

12

請嘗試以下代碼。

if (Arrays.asList(isoArray).contains("YOUR_STRING")) 
+1

請注意'.contains()'的實現可能使用循環 – MadcoreTom

0

如果您使用的是Java 7,那麼您也可以在字符串常量上使用switch-case。

0

不知道問題的背景很難給出答案。

比較/搜索/組織數組最常用的方式(也是廣泛教授的方式)是循環。一種這樣的解決方案是氣泡排序alg型循環。

for(int x = 0; x < array1.size(); x++){ 
    for(int y = 0; y < array2.size(); y++){ 
     if(array1[x].compare(array2[y]==0) 
      Then they are equal 
     else 
      They are not equal 
    } 
} 

這是迄今爲止做一些簡單的多陣列

0

看起來你要使用的類型的最快方法是設置

Set<String> mySet = new HashSet<String>(); 
mySet.add("020"); 
mySet.add("784"); 
mySet.add("004"); 
mySet.add("028"); 

if(!mySet.contains(element[2])){ 
    country a = new country(element[4], element[5], element[7]); 
    countries.add(a); 
} 
  • HashSet將使用散列查看價值。
  • TreeSet將執行二叉樹搜索。
0

我的朋友,從你的例子中看起來好像你正在試圖看看element[2]是否包含在一個值數組中。正如@Real所說,您可以將數組轉換爲列表,以便您可以使用列表的謂詞contains。那麼猜猜怎麼樣?謂詞只是一個循環。

我鄙視包含這種無償多次轉換的代碼。它會產生垃圾。這是今天運行良好的代碼,因爲您的數據的大小爲N,並且在您的公司上市並且數據現在尺寸爲100000 * N之後的五年內死亡。不要因此而死亡。

所以選擇是顯而易見的。您可以使用ArrayList有一個轉換到從一開始就保持你的數組:

ArrayList<String> isoArray = Arrays.asList(new String [] {"020", "784", "004", "028"}); 

... 

    if (!isoArray.contains(element[2])) { 
     country a = new country(element[4], element[5], element[7]); 
     countries.add(a); 
    } 

或者您也可以實現自己的包含裸陣列的工作方法:

static public boolean contains(Object [] a, Object item) { 
    for (Object aItem : a) if (item.equals(aItem)) return true; 
    return false; 
} 

你會想在一個類(大多是靜態函數)中整合像這樣的實用函數,稱爲(tada!)Utility。可以肯定的是,這就是爲什麼好主給了我們循環和功能。現在,

String isoArray[] = {"020", "784", "004", "028"}; 

... 

    if (!contains(isoArray, element[2])) { 
     country a = new country(element[4], element[5], element[7]); 
     countries.add(a); 
    } 

和所有是正確的與世界...

有,如果你可以把你的價值觀的表中排序順序的另一種方法:使用Arrays二進制搜索程序。

String isoArray[] = {"004", "020", "028", "784"}; 

... 

    if (Arrays.binarySearch(isoArray, element[2]) >= 0) { 
     country a = new country(element[4], element[5], element[7]); 
     countries.add(a); 
    }