HashMap和ArrayList在检索中混淆

时间:2012-02-23 08:48:04

标签: android arraylist hashmap

我在arraylist和hashmap上有问题

根据我的要求,我将数据存储到HashMap中,之后我创建了List作为List>。

        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);

现在我想将值检索为String,String

当我将代码应用为:

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

我在formet中获得单个字符串值

               {Contract,ServiveValue}

但是我想把它分成2个字符串值...这些值也是多余的,如果使用hashMap,那么它不会显示冗余值。

请帮帮我..

3 个答案:

答案 0 :(得分:1)

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

你能做的是:

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

其他方式,您已经有两个拆分的字符串值。您可以在keySet()对象上使用values()hashMap2方法来实现这一目标。

答案 1 :(得分:0)

HashMap(和一般地图)用于键和值的多个一对一映射。你确定需要吗?查看您的代码,您似乎将该地图用作“配对”类。我会跳过列表,将所有内容放在同一个地图中,然后迭代地图中的对:

// 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

答案 2 :(得分:-2)

String value = hashmap.get(“contract”); 你将获得ServiveValue的价值