HashMap和在检索

问题描述:

ArrayList的混乱我有ArrayList和HashMap的HashMap和在检索

一个问题,因为根据我的要求,我将数据存储到HashMap和之后,我已经创建了一个列表,列表>。

 HashMap<String,String> hashmap; 
     static List<HashMap<String,String>> hashmap_string; 

虽然检索从数据库中的值,并把它放在HashMap和ArrayList的,如:

    contract_number=c.getString(c1); 
        Log.i("c1.getString,contract_number", contract_number); 
        String service_level=c.getString(c2); 
        hashmap=new HashMap<String, String>(); 
        hashmap.put(contract_number, service_level); 
        hashmap_string.add(hashmap); 

现在我要检索的值作为字符串,字符串

,当我应用代码为:

   for(int i=0;i<hashmap_string.size();i++) 
       { 
        Log.i("arraylist", ""+hashmap_string.get(i)); 
       } 

我在formet中获取单个字符串值为

   {Contract,ServiveValue} 

,但我想这个分成2个字符串值......此外,这些值是多余的,如果是使用HashMap的话,就不会显示我的冗余值。

用于多个键和值中的一个一对一映射,请帮我在这..

+0

为什么你不只使用HashMap来代替。如果您需要将'Contract'和'ServiveValue'作为单个值,我认为这是更好的选择。 – 2012-02-23 08:59:21

+0

看来你正在设计你的数据非常糟糕。你试图用这种方式解决什么问题? – 2012-02-23 09:13:00

+0

因为HashMap不检索重复的值,我的合同和服务水平值有重复的值 – Kanika 2012-02-23 09:14:02

的HashMap(及地图一般)。你确定你需要吗?看看你的代码,看起来你使用地图作为“Pair”类。我会跳过列表,并把一切都放在同一张地图,然后遍历对在地图:

// using tree map to have entries sorted on the key, 
// rather than the key's hash value. 
Map<String, String> data = new TreeMap<String, String>(); 
data.put("c1", "s1"); 
data.put("c2", "s2"); 

for (Map.Entry<String, String> entry : data.entrySet()) { 
    String contract = entry.getKey(); 
    String level = entry.getValue(); 
    Log.i("data", contract + " : " + level"); 
} 

将输出(假设TreeSet的):

c1 : s1 
c2 : s2 

或者,例如创建包含两个字符串(合同号和服务级别)的ContractServiceLevel类,并将该类的实例放入列表中。

编辑:

public final class ContractServiceLevel { 
    public final String number; 
    public final String serviceLevel; 

    public ContractServiceLevel(String c, String s) { 
     number = c; 
     serviceLevel = s; 
    } 
} 

List<ContractServiceLevel> contracts = new ArrayList<ContractServiceLevel>(); 
contracts.add(new ContractServiceLevel("c1", "s1.1")); 
contracts.add(new ContractServiceLevel("c1", "s1.2")); 
contracts.add(new ContractServiceLevel("c2", "s2.1")); 

for (ContractServiceLevel contract : contracts) { 
    Log.i("data", contract.number + ":" + contract.servicveLevel); 
} 

将输出:

c1 : s1.1 
c1 : s1.2 
c2 : s2.1 
+0

什么关于如果我把 – Kanika 2012-02-23 09:19:06

+0

data.put(“c1”,“s1”);并再次data.put(“c1”,s1“);现在它只会返回1对为”c1“,”s1“...和我的密钥和值都包含重复的值..所以我该如何解决这 – Kanika 2012-02-23 09:20:30

+0

你可以去列表的变种,看看我编辑的帖子。 – claesv 2012-02-23 09:26:21

看来你失去了一些东西。当您执行hashmap_string.get(i)时,您将获得<HashMap<String,String>。所以,这是代码的正确价值。

你可以做的是:

 HashMap<String, String> hashMap2 = hashmap_string.get(i); 
     String value = hashMap2.get("your_key"); 

其他方式,你已经有了,两个分离的字符串值。您可以通过使用keySet()values()方法获得该方法,而不是使用hashMap2对象。

+0

它仍然不检索重复的数据 – Kanika 2012-02-23 09:23:37

String value = hashmap.get(“contract”); 你会得到的值为ServiveValue