2013-12-18 27 views
-2

我想用Java集合發現在與啓動字母開頭的列表中的文字使用集合: 例如:如何在Java中

TreeMap<String, Double> tm = new TreeMap<String, Double>(); 
     // Put elements to the map 
     tm.put("Zara", new Double(3434.34)); 
     tm.put("Mahnaz", new Double(123.22)); 
     tm.put("Ayan", new Double(1378.00)); 
     tm.put("Daisy", new Double(99.22)); 
     tm.put("Qadir", new Double(-19.08)); 
    Toast.makeText(getApplicationContext(), ""+tm.get("Zar"),Toast.LENGTH_SHORT).show(); 

在這種情況下,它會顯示爲空。但是我想要做的是顯示所有以該字母開頭的單詞。我怎樣才能做到這一點?在此先感謝

+1

tm.get (「Zar」)與tm完全不同。獲得( 「扎拉」); –

+1

那麼,我該如何才能從starup中得到密鑰呢? 這個功能還有更多可用的集合嗎? –

回答

0

有幾個選擇:

  1. 如果你總是從第三個字去然後做一個多重映射 - Map<String, List<Data>>Data包含String namedouble double,關鍵是前三個字母所有的名字。

  2. 您可以通過TreeMap進行掃描,因爲它至少被排序,你知道你可以停止一旦你通過扎爾 - 但這仍然是效率低下。

  3. 您可以使用數據庫(例如嵌入Derby數據庫)並使用數據庫的索引/搜索/查詢功能。

  4. 您可以在單詞中的每個字符上構建自己的樹狀結構。然後root-> z-> a-> r會給你所有以zar開頭的單詞。根 - > B-> 0會給你博開始的每一個字,等

0

你只需要遍歷列表,並檢查是否與給定的String鍵啓動。

例子:

 for (String elem : tm.keySet()) { 
      if(elem.startsWith("Zar")) { 
       System.out.println(elem); 
      } 
     } 

輸出:

Zara 

,如果你想忽略大小寫:

if(elem.toLowerCase().startsWith("zar".toLowerCase())) 
0
TreeMap<String, Double> tm = new TreeMap<String, Double>(); 
//...add values. 
//get all keys 
Set<String> keys = tm.keySet(); 
Set<String> result = new HashSet<String>(); 
for(String key : keys){ 
    //check the beginning of the keys 
    if(key.startsWith("Zar"){ 
    result.put(key); 
    } 
} 
//get the values for your collected keys 
for(String key : result){ 
    double value = tm.get(key); 
} 
+0

如果我有超過20,0000個來自數據庫的條目並將它添加到tm。有這種用途的 ,它運行得很快嗎?因爲我測試for()和Arraylist =>它似乎每次運行緩慢我搜索單詞 –

+0

在這種情況下,我會搜索後排序keySet,並檢查是否可以取消搜索。對於性能問題也是如此:請務必在真實環境中進行測試。如果您當前的解決方案沒有問題,則無需對其進行優化。 – Simulant

0

只是閱讀時使用的收集不僅會如果你遇到問題,可以幫助你ct代碼中的情況相同。如果您不明白爲什麼給定的數據結構對問題有好處,那麼您將無法將其應用於自己的代碼。

this鏈接可以幫助你

0

所以你怎麼能做到這一點?

首先找到的HashMap的所有按鍵被

tm.keySet() 

然後使用上鍵iterator和與之相匹配的string.See下面的例子

String abc = "Zar"; 
HashMap s = new HashMap(); 
s.put("Zara", new Double(1.0)); 
Set x =s.keySet(); 
Iterator iter = x.iterator(); 
     while (iter.hasNext()) { 
      String key = iter.next().toString(); 
    if(key.startsWith(abc)){ 
     System.out.println(s.get(key)); 
    } 
     } 
2

由於TreeMapNavigableMap,它在計算上是便宜從給定鍵開始迭代映射:

String prefix = "Zar"; 
for (String person::tm.tailMap(prefix).keySet()) { 
    if (person.startsWith(prefix)) {...} 
}