迭代列表并将数据放入hashmap中

时间:2010-05-17 09:21:43

标签: java

我有一个列表,我需要循环它并将其数据放在hashmap中。我正在使用这种方法

for(int i=0;i<list.size();i++) {
    HashMap hMap=new HashMap();
    hMap.put("Data", list);
}

但是当我需要从hMap读取我正以这种方式做的值时

Collection c = hMap.values();
Iterator itr = c.iterator();

while(itr.hasNext()) {
    System.out.println("next val is--"+itr.next());
}

next vali is---com.bean.xyz@23032bc[id=1]格式打印,我需要准确的数据,我该怎么做?

5 个答案:

答案 0 :(得分:2)

我在这里看到了多个问题

  1. 您只能获取hashmap中的最后一个列表项。因为您在每次迭代时都会创建一个新的hashmap,并且在下一次迭代时它的引用会丢失。

  2. 您需要在com.bean.xyz类中实现toString方法以输出所需的数据成员

答案 1 :(得分:1)

Map是从键到值的映射。您需要为列表的每个元素定义应该是什么键,以及值应该是什么。

您的原始代码:

for(int i=0;i<list.size();i++) {
    HashMap hMap=new HashMap();
    hMap.put("Data", list);
}

这有效地将关键字“数据”映射到值list,多次重复此映射,但您只有条目

以下是一个示例:获取List<String>,并从列表中的该字母开始构建从字母到字符串的映射。

    List<String> list = Arrays.asList(
        "abc", "def", "ghi", "ijk", "abracadabra"
    );
    Map<Character,String> map = new HashMap<Character,String>();
    for (String s : list) {
        map.put(s.charAt(0), s);
    }
    System.out.println(map); // prints "{g=ghi, d=def, a=abracadabra, i=ijk}"
    System.out.println(map.get('i')); // prints "ijk"
    System.out.println(map.containsKey('x')); // prints "false"

请注意"abc"在地图中“丢失”。那是因为你只能将一个键映射到一个值。另一方面,您可以拥有Map<Character,Set<String>>,即从每个键到设置值的映射。这实际上是一个multimap,而Guava有一个实现。

相关问题

答案 2 :(得分:0)

我不知道您尝试打印哪种类型的对象。但是,如果它是您尝试打印的一个对象之一,则必须在类中创建一个覆盖对象类中的toString方法。

public string toString()
{
    return "";
}

在return语句中,您可以返回一些对象属性。

答案 3 :(得分:0)

首先,您知道您的哈希表只包含一个值,对吧?如果要将list中的所有项添加到一个哈希表,则必须在for循环外调用HashMap hMap=new HashMap();

要输出正确的数据,请为您的类型实施toString()或将其投射到正确的类型。

答案 4 :(得分:0)

您可能希望按如下方式调整填充HashMap的方式:

HashMap<String,xyz> hMap=new HashMap<String,xyz>();
for(int i=0;i<list.size();i++)
{
  hMap.put("Data"+i, list);
}

xyz是您正在使用的对象com.bean.xyz。这种方法允许您在其对象(如HashMap)中利用Java的泛型功能。

你看到com.bean.xyz@23032bc [id = 1]的原因是你的bean可能没有为它定义toString方法。如果没有toString方法,则使用Object.toString方法,该方法返回对象在JVM堆中的地址。如果要查看其他内容,则必须覆盖对象xyz中的toString方法。

public class xyz {
  ...
  public String toString () {
    return "hello world"; //put what you want to see here
  }
  ...
}