Java 从HashMap中删除位置

Java 从HashMap中删除位置,java,hashmap,Java,Hashmap,我在做一个类似音乐播放器的东西。我正在HashMap上构建播放列表,我在删除特定的setlistcase 5时遇到问题。它工作,但当我删除位置在列表中间的情况下,1显示所有播放列表不再工作,因为我有空的空间1,2,3,删除,5,6…现在我该如何在删除一个索引后使这些位置减少一个?看来x不能解决我的问题。我希望你能理解我的问题,这是代码,如果你需要我把任何东西翻译成英语,尽管问。谢谢你的帮助 package PLAYLIST2; import java.util.HashMap; import

我在做一个类似音乐播放器的东西。我正在HashMap上构建播放列表,我在删除特定的setlistcase 5时遇到问题。它工作,但当我删除位置在列表中间的情况下,1显示所有播放列表不再工作,因为我有空的空间1,2,3,删除,5,6…现在我该如何在删除一个索引后使这些位置减少一个?看来x不能解决我的问题。我希望你能理解我的问题,这是代码,如果你需要我把任何东西翻译成英语,尽管问。谢谢你的帮助

package PLAYLIST2;

import java.util.HashMap;
import java.util.Scanner;

public class Odtwarzacz {

    // String lista;

    // Odtwarzacz(Playlist) {
    // lista = b;
    // }

    public static void main(String[] args) {
        int nr;
        int koniec = 0;
        String nazwa11;
        int x = 0;
        HashMap<Integer, Playlist> Playlista = new HashMap<Integer, Playlist>();
        Playlista.put(x, new Playlist("Rock"));
        x++;
        Playlista.get(0).dodajUtwor("Stockholm Syndrome", "Muse", 2004);
        Playlista.get(0).dodajUtwor("Absolution", "Muse", 2004);
        Playlista.put(x, new Playlist("Pop"));
        x++;
        Scanner odczyt = new Scanner(System.in);
        // TODO Auto-generated method stub
        while (koniec == 0) {
            System.out.println("_________________________");
            System.out.println("1.Wyświetl listę playlist");
            System.out.println("2.Dodaj playlistę");
            System.out.println("3.Wyświetl playlistę");
            System.out.println("4.Posortuj playlistę");
            System.out.println("5.Usuń playlistę");
            nr = odczyt.nextInt();
            switch (nr) {
            case 1: {
                System.out.println("Lista playlist: ");
                for (int i = 0; i < x; i++) {
                    System.out.println(i + ". " + Playlista.get(i).Nazwa());
                }
                break;
            }

            case 2: {
                System.out.print("Podaj nazwę nowej playlisty: ");
                nazwa11 = odczyt.next();
                Playlista.put(x, new Playlist(nazwa11));

                System.out.println("Dodano playlistę: "
                        + Playlista.get(x).Nazwa());
                x++;
                break;
            }
            case 3: {
                System.out.print("Podaj numer playlisty:");
                nr = odczyt.nextInt();
                Playlista.get(nr).wyswietlListe();
                break;
            }
            case 4: {
                System.out.print("Podaj numer playlisty:");
                nr = odczyt.nextInt();
                Playlista.get(nr).sortuj();
                break;

            }
            case 5: {
                System.out.print("Podaj numer playlisty:");
                nr = odczyt.nextInt();
                System.out.println("Skasowano playlistę: "
                        + Playlista.get(nr).Nazwa());
                Playlista.remove(nr);
                x--;
                break;
            }
            }
        }
    }
}

您似乎不需要HashMap

HashMap只是一个没有顺序的键值存储

在您的情况下,列表似乎是更好的选择。这是一个命令,因为它是它的主要观点

您可以专门使用:


如果要在之后安全地删除并获得正确的密钥,必须迭代映射


首先让我看看我是否正确理解你的问题。您希望在执行任何删除操作后重新排序播放列表。1,2,3,4,5 . 如果删除3,则它应该是1,2,4,5,而不是1,2,4,5

若上述为真,最好使用linkedhashmap集合。同样,案例1也可以重写为

case 1: {
                System.out.println("Lista playlist: ");
                for (Playlist pll:Playlista.values()) {
                    System.out.println(i + ". " + pll.Nazwa());
                }
                break;
            }

首先,为什么要使用Map而不是array?Map不能保证其条目中的任何顺序,而SortedMap却可以;更重要的是,你不能有一个键,也不能没有值:最坏的情况下,这个值是空的。这是我大学课堂上的一个项目,我被告知要使用hashmap。实际上,这不是一个空格,这是键之间的关联中的一个洞,但不是空条目……如果你允许用户访问你正在删除的项目,你想给他们看什么?我认为你的代码已经处理好了。你完全正确@Jean,但他说:这是我大学课堂上的一个项目,我被告知使用HashMapExecute或不使用HashMapExecute,只要地图有一个键索引,那么它应该是一个ArrayList。我知道你可以,它完全没有用Scalm down。你们不喜欢我的答案,不要投赞成票,继续前进。我并没有投你们的票,但若IOP要求最好的选择,我们将投票结束这个问题,因为它太宽泛了。你也不是在回答OP的问题,你是在给出你的意见。。。顺便说一句:你读了我的第一句话吗?你是完全正确的@Jean这是我的观点,但并非如此嘿,你说的设置新钥匙是什么意思?我也不确定我是否理解变量计数的作用。
int count = 0;
boolean found = false;
Iterator<Map.Entry<Integer,String>> iter = TestMap.entrySet().iterator();
while (iter.hasNext()) {
    Map.Entry<Integer,String> entry = iter.next();
    if("Sample".equalsIgnoreCase(entry.getValue())){
        iter.remove();   
        found = true;      
    }
    if (found) {
       // set the new key using count...
    }

    count ++;
}
case 1: {
                System.out.println("Lista playlist: ");
                for (Playlist pll:Playlista.values()) {
                    System.out.println(i + ". " + pll.Nazwa());
                }
                break;
            }