2014-04-21 34 views
0

我想問一下我可以在我的項目中使用的集合。以下是我的要求。詢問具有以下屬性的特定Java集合

  1. 它有鍵 - 值對。 一個是移動領域,另一個是距離。
  2. 移動領域是獨一無二的,但距離不是唯一的。
  3. 它應該按照距離場的升序存儲它們。
  4. 我不希望重複距離(密鑰對)被刪除。

    我已經嘗試使用TreeMap將距離作爲關鍵值和移動值。

    但它是刪除重複。而且我也不能把手機當作鑰匙,因爲 否則它會根據手機的價值來對手機進行分類。所以請告訴做什麼。

    TreeMap tree = new TreeMap(); 
    while(rs.next()){ 
    // obtaining dist and mob values here 
        tree.put(dist, mob); 
    } 
    Set set=tree.entrySet(); 
    Iterator itr=set.iterator(); 
    out.println("distance " + "mobile"); 
    while(itr.hasNext()){ 
        Map.Entry m=(Map.Entry)itr.next(); 
        out.println(m.getKey()+" "+m.getValue()+"\n"); 
    } 
    

我想所有的手機號碼,在其相應的距離增加的順序。這是我到目前爲止所嘗試的,但與此相關的問題是它消除了重複的距離。

+0

沒有遺憾,移動領域已經是獨一無二的。但是它們的相應距離可以重複。 – sagar

+0

'它應該按照距離場的升序存儲它們'我不明白。字段是關鍵,距離是價值,你希望它爲兩者排序(以特定的方式)?請詳細說明,也許顯示你的嘗試,以幫助給我一個你在做什麼的想法 –

+0

你打算執行什麼操作 – arunmoezhi

回答

1

使用相同的TreeMap中與參數作爲

TreeMap<Integer, LinkedList<Integer>> tMap=new TreeMap<Integer, LinkedList<Integer>>(); 

這裏考慮的距離爲重點,並作爲mobileNo價值。根據你的陳述,相同的距離有幾個mobileNo值(因爲距離不是唯一的)。所以對於值字段,我們可以有LinkedList或ArrayList。

TreeMap將以排序的方式存儲密鑰。因此,您可以基於密鑰和密鑰的所有值來打印TreeMap。

以下完整代碼給出,

import java.util.Collections; 
import java.util.LinkedList; 
import java.util.TreeMap; 

public class MultiValueCollection { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     MultiValueCollection mCollection=new MultiValueCollection(); 
     TreeMap<Integer, LinkedList<Integer>> tMap=new TreeMap<Integer, LinkedList<Integer>>(); 


     mCollection.addMobileNumberByDistance(tMap, 40, 65655423); 
     mCollection.addMobileNumberByDistance(tMap, 40, 76785647); 
     mCollection.addMobileNumberByDistance(tMap, 40, 85785852); 
     mCollection.addMobileNumberByDistance(tMap, 40, 96786344); 
     mCollection.addMobileNumberByDistance(tMap, 40, 57657354); 

     mCollection.addMobileNumberByDistance(tMap, 20, 13543353); 
     mCollection.addMobileNumberByDistance(tMap, 20, 23453456); 

     mCollection.addMobileNumberByDistance(tMap, 30, 33353544); 
     mCollection.addMobileNumberByDistance(tMap, 30, 43534554); 
     mCollection.addMobileNumberByDistance(tMap, 30, 59789785); 


     mCollection.printMobileNumbersByDistance(tMap); 
    } 

    public void addMobileNumberByDistance(TreeMap<Integer, LinkedList<Integer>> tMap, int distance, int mobileNo) 
    { 
     LinkedList<Integer> list=null; 
     if(tMap.get(distance)==null) 
     { 
      list=new LinkedList<Integer>(); 
     }else 
     { 
      list=tMap.get(distance); 
     } 
     list.push(mobileNo); 
     tMap.put(distance, list); 
    } 

    public void printMobileNumbersByDistance(TreeMap<Integer,LinkedList<Integer>> distNumberMap) 
    { 
     LinkedList<Integer> list; 
     for(int n : distNumberMap.keySet()) 
     { 
      list=distNumberMap.get(n); 
      Collections.sort(list);//Add this line if mobileNo needs to be sorted for a given distance 
      for(int k : list) 
      { 
       System.out.println("key "+n+" value "+k); 
      } 
     } 
    } 
} 
2

如果你想保留每個鍵的幾個值,你需要一個MultiMap。番石榴有幾個,其中包括一對已經排序的夫婦。以TreeMultiMap爲例。

Multimap的實現,其鍵和值按其自然排序或由提供的比較器排序。

0

有幾種實現方法。以下是您可能沒有考慮但可能有效的方法:

1)定義一個包含「key」和「value」作爲實例字段的新類。

2)實現Comparable接口,即編寫自己的如何訂購規則,包括如何處理繫帶休息。

3)使用通過Comparable進行排序的集合。