管理地图串(Manage strings in Map)

2019-10-19 02:24发布

我已经在Java中使用地图第一次。 我创建,我创建的字符串与这种结构的控制台上的一个项目:

String = word1 word2 word3, code;  //This code is a number, can be the same as the 
                                   // Map's key.

然后,每个创建这样一个字符串的时候,我把它保存到一个地图。 创建并保存到地图的一个或多个字符串后,我必须能够向他们展示在控制台,或删除其中之一。

我得到的问题是,添加一个字符串到地图时,被覆盖前一个。

主类我以这种方式工作:

我一个字符串添加到地图:

musicmap.add(title, autor, format);

我列出的项目:

musicmap.list();

我从地图上删除一个元素:

musicmap.delete(code);

该方法添加(),表()和delete()在其他类这样定义的方法:

Map<Integer, Music> musicMap= new HashMap<Integer, Music>();  //Music is a class 
                                             // where is defined a constructor with the
                                             // structure of the strings

public void add(String title, String autor, String format){
    int max = 0;
    for (Integer mapCode : musicMap.keySet()){
        if (mapCode > max){
            max = mapCode;
        }
    }
    int newCode = max++;
    Music musicItem = new Music(title, autor, format, newCode);
    musicMap.put(newCode, musicItem);
}

public void list(){
    for (Music item : musicMap.values()){
        System.out.println(item.toString());
    }
}

public void delete(int code){
    musicMap.remove(code);
}

音乐实例只是调用到定义构造函数与音乐列表中的元素(这是标题,作者日期,格式或类型和代码)其他类:

public Music(String title, String autor, String type, int code){
    this.setTitle(title);
    this.setAutor(autor);
    this.setType(type);
    this.setCode(code);

}

Answer 1:

改变这一行
int newCode = max++;

int newCode = max + 1;

您的密钥值是从1开始。

我希望这将有所帮助。

编辑:
在您的代码newCode = max++分配之前完成增加的max价值,这让你最大的键值由代码创建的问题if (mapCode > max)这个条件没有被执行,因为两者都具有(0)每次都相同的值为零。



Answer 2:

变化int newCode = max++;int newCode = max + 1;

要么

变化int newCode = max++;int newCode = ++max;

目前,所有的按键都是0 。 这是一个可怕的错误怎么一回事,因为它似乎是正确的,但分配这里int newCode = max++; 在加入之前发生max++

我认为你不需要Map ,因为你是一个模拟的行为ArrayList 。 改变你的实施是这样的:

private List<Music> list = new ArrayList<Music>();

public void add(String title, String autor, String format){
    Music musicItem = new Music(title, autor, format, newCode);
    list.add(musicItem);
}

你会得到你的索引的方式。 避免使用++--一般的运营商。



文章来源: Manage strings in Map