1

我正在使用hasmap和LinkedHasmap一段时间,但现在在这种情况下表现得很奇怪,我正在向hasmap添加一个键和一个来自2个具有相同大小的数组的值,在这种情况下,size = 4,但是hasmap在调试中将第一个键设置为空,我看到它会覆盖相同位置的第二个键,第一个键,它从来没有相同的键,也从来没有相同的键,所以我无法理解发生了什么。

hasmap 被声明有一个字段。

    private HashMap<String, String> courses = new HasMap<String, String>();

在这种方法中,我想填充 hasMap:

private void coursesInit(int coursesListSize) {

    for (int j = 0; j < coursesListSize; j++) {

        LayoutInflater inflater = (LayoutInflater) this
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        LinearLayout inserPoint = (LinearLayout) findViewById(R.id.linear_layout_inside_left);

        LinearLayout row = new LinearLayout(this);
        row.setLayoutParams(new LayoutParams(
                android.view.ViewGroup.LayoutParams.MATCH_PARENT,
                android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
        View view = inflater.inflate(R.layout.courses_button_left_drawer,
                null);

        Button btnTag = (Button) view.findViewById(R.id.course_id);
        btnTag.setLayoutParams(new LayoutParams(
                android.view.ViewGroup.LayoutParams.MATCH_PARENT,
                android.view.ViewGroup.LayoutParams.WRAP_CONTENT));

        if (coursesIdList.isEmpty()) {
            btnTag.setText("Your Course " + (j + 1));
            btnTag.setId(j);

        } else {
            btnTag.setText(coursesNamesList.get(j));
            btnTag.setId(Integer.parseInt(coursesIdList.get(j)));

        // Populate LinkedHasMap in the correct order where Key=
        // course_id && Value= course_fullname
        courses.put(coursesIdList.get(j), coursesNamesList.get(j));

        }

        if (j != 0) {
            btnTag.setBackgroundResource(R.drawable.border_inside);
        }

        row.addView(view);

        inserPoint.addView(row, 3);
    }

}

我也尝试过只使用 Map 和 LinkedHasMap 并在一个方法中只使用一个 for 循环数组,但结果相同。

调试截图:

课程有地图: 课程有地图

数组: 数组

4

1 回答 1

3

如果您的问题是实例的table[0]元素在调试器中,那么只要按照文档中的说明工作(它确实如此),这不是问题。内部实现细节对您来说并不重要(它是一个供您使用的黑匣子)。如果要检索地图的键,请使用.HashMapnullHashMapHashMap#entrySet

请参阅以下 HashMap 中的单个插入示例和结果HashMap#table字段:

 final Map<String, String> map = new HashMap<String, String>();
 map.put("One", "1");

在此处输入图像描述

如您所见,元素插入在table[12].

还要记住HashMap允许 null 作为 key,所以如果你将 key 设置为 null ,这是一个有效的 key。

于 2013-08-30T17:50:28.867 回答