了解哈希映射键 - java

时间:2014-07-24 19:18:55

标签: java hash map

我知道HashMap不允许重复键(它允许重复值)。 然而,在这个完美的例子中,所有的值都有相同的键(这意味着键不是唯一的)也许我误解了代码。有人可以帮助我理解它。

这是代码

public class PlayListManager {
//**********************************hashmap keys************************
public static final String ALL_VIDEOS = "AllVideos";
public static final String ALL_Songs = "AllSongs";
//***************************************************************************
 ..
 ...
 ....
       while (cursor.moveToNext()) {
        Songs song = new Songs();
        song.songId = cursor.getString(cursor
                .getColumnIndexOrThrow(MediaStore.Audio.Media._ID));
        song.artist = cursor.getString(cursor
                .getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
        song.title = cursor.getString(cursor
                .getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
        song.songName = cursor
                .getString(cursor
                        .getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));
        song.duration = Integer.parseInt(cursor.getString(cursor
                .getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION)));
        song.albumId = Integer.parseInt(cursor.getString(cursor
                .getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID)));
        song.songData = cursor.getString(cursor
                .getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));


        //*******here it uses the same ky for all the videos?!!*************
        HashMap<String, Object> songMap = new HashMap<String, Object>();
        songMap.put(ALL_Songs, song);
        songsList.add(songMap);

    }

}

1 个答案:

答案 0 :(得分:3)

while循环的每次迭代中,代码都在创建一个 new HashMap实例,并且只用一个映射String密钥的条目填充它("AllSongs")到Song对象。

此地图(仅包含一个条目)将添加到列表songsList

while循环完成后,您将获得HashMap个列表,其中每个地图基本上将硬编码关键字映射到一首歌曲。

  

songsList:

     

&lt;“AllSongs”,song1&gt;,&lt;“AllSongs”,song2&gt;,&lt;“AllSongs”,song3&gt;,...

在这种情况下,使用HashMap似乎是多余的。您可以使用Song实例填充列表,而无需在地图中保存每个实例。

这里的关键概念是有许多HashMap(每次迭代创建一个),而不是拥有“全局”HashMap。如果它是全局的,那么每首歌都会覆盖另一首歌,因为它们总是使用相同的硬编码密钥进行映射。