我正在使用hasmap和LinkedHasmap一段时间,但是现在在这种情况下,我正在向hasmap添加一个键和一个来自2数组的值,在这种情况下,大小相同,大小为4,但是hasmap在调试中将第一个键设置为null我看到它将覆盖第二个键,而第二个键具有相同的位置,它永远不会具有相同的键,而且永远不会相同,因此我无法理解发生了什么。
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,并在一个只使用a的方法中尝试循环数组,但结果相同。
调试屏幕截图:
HasMap课程:
Courses Hasmap
数组:
Arrays
最佳答案
如果您的问题是在调试器中table[0]
实例的HashMap
元素是null
,那么只要HashMap
可以按照文档中的说明进行操作,就没有问题。内部实现细节对您来说并不重要(这是供您使用的黑匣子)。如果要获取地图的按键,请使用HashMap#entrySet
。
请参见以下示例,该示例在HashMap中单次插入,并生成HashMap#table
字段:
final Map<String, String> map = new HashMap<String, String>();
map.put("One", "1");
如您所见,该元素插入在
table[12]
处。另外请记住
HashMap
allows null as key,因此,如果将key设置为null,则这是有效的密钥。关于java - HashMap的第一个键为null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18538529/