Java 如何从此哈希表中获取信息

Java 如何从此哈希表中获取信息,java,swing,arraylist,hashtable,Java,Swing,Arraylist,Hashtable,我会尽量保持简单,但仍然可以理解。如果有任何困惑,请告诉我 我得到了这个哈希表: private Hashtable<String, ArrayList<String>> allChannels = new Hashtable<String, ArrayList<String>>(); 所以,我很明显可以看出最后一个方法就是把事情搞砸的方法,因为它将列表中的所有客户机都加起来了。但它应该说什么呢 解决方案: 所以,我成功了 public

我会尽量保持简单,但仍然可以理解。如果有任何困惑,请告诉我

我得到了这个哈希表:

private Hashtable<String, ArrayList<String>> allChannels = new Hashtable<String, ArrayList<String>>();
所以,我很明显可以看出最后一个方法就是把事情搞砸的方法,因为它将列表中的所有客户机都加起来了。但它应该说什么呢

解决方案: 所以,我成功了

    public void updateUsersInChannelJlist(JList jList3) throws RemoteException {
        usersInChanDLM.clear();
        usersInChanDLM.removeAllElements();
        for(String s : cf.getUsersInChannel(channel)){
            if(!(usersInChanDLM.contains(s))){
                usersInChanDLM.addElement(s);
            }
        }
        jList3.setModel(usersInChanDLM);
   }


要么我遗漏了一些非常明显的东西,要么你只是忽略了答案(你的代码中已经有了答案!)

你应该考虑的是,如果你一遍又一遍的调用这个连接通道方法,你会不断地破坏你的ARAYLIST(因为你每次调用这个方法时都会调用它),所以实际上每个通道都注定要有一个用户。


您应该检查数组列表是否为空,如果不是空,请不要费心重新实例化它(除非我遗漏了您正在尝试做的事情,我很可能是这样)。

要么我遗漏了一些非常明显的内容,要么您忽略了答案(您的代码中已经有了答案!)

你应该考虑的是,如果你一遍又一遍的调用这个连接通道方法,你会不断地破坏你的ARAYLIST(因为你每次调用这个方法时都会调用它),所以实际上每个通道都注定要有一个用户。 您应该检查数组列表是否为空,如果不是空,请不要麻烦重新实例化它(除非我错过了您正在尝试做的事情,我很可能是这样)。

这应该可以工作

@Override
public ArrayList<String> getUsersInChannel(String channel) throws RemoteException{
    return allChannels.get(channel);   
}
这应该行得通

@Override
public ArrayList<String> getUsersInChannel(String channel) throws RemoteException{
    return allChannels.get(channel);   
}

connectChannel方法中存在错误。您不应该每次都创建ArrayList

public void connectChannel(String username, String channel) throws RemoteException{
    ArrayList<String> ch = allChannels.get(channel);
    if (ch==null){
        ch = new ArrayList<String>();
        allChannels.put(channel, ch);
    }   
    ch.add(username);
}
public void connectChannel(字符串用户名,字符串通道)引发RemoteException{
ArrayList ch=allChannels.get(通道);
if(ch==null){
ch=新的ArrayList();
所有通道。放置(通道,通道);
}   
ch.add(用户名);
}

您的connectChannel方法中存在错误。您不应该每次都创建ArrayList

public void connectChannel(String username, String channel) throws RemoteException{
    ArrayList<String> ch = allChannels.get(channel);
    if (ch==null){
        ch = new ArrayList<String>();
        allChannels.put(channel, ch);
    }   
    ch.add(username);
}
public void connectChannel(字符串用户名,字符串通道)引发RemoteException{
ArrayList ch=allChannels.get(通道);
if(ch==null){
ch=新的ArrayList();
所有通道。放置(通道,通道);
}   
ch.add(用户名);
}

我得到了一个覆盖的伴侣:)我只是没有粘贴所有的代码。如果(!allChannels.containsKey(channel))如此,我已经返回了allChannels.get(channel);事实上,肯定还有别的问题。JList with usersInChannel显示所有在线的用户。这很像IRC,在IRC中输入一个频道,然后您可以看到列表中输入的同一频道中的所有其他用户。在我的情况下,这是一个JListI得到了覆盖的伙伴:)我只是没有粘贴所有的代码。如果(!allChannels.containsKey(channel))如此,我已经返回了allChannels.get(channel);事实上,肯定还有别的问题。JList with usersInChannel显示所有在线的用户。这很像IRC,在IRC中输入一个频道,然后您可以看到列表中输入的同一频道中的所有其他用户。对我来说,这是一个问题是的,我也是这么想的。我想还有别的问题。我在我的JList上做了一个systemoutprint,它运行这个usersInChannelJList.setModel(gl.getUsersInChannelAsDefaultListModel());我至少知道System.out.println(gl.getChannel());返回用户所在的实际频道,所以这不应该是问题是的,我也是这么想的。我想还有别的问题。我在我的JList上做了一个systemoutprint,它运行这个usersInChannelJList.setModel(gl.getUsersInChannelAsDefaultListModel());我至少知道System.out.println(gl.getChannel());返回用户所处的实际通道,因此这不应该是问题所在。我已解决了该方法,只是没有粘贴所有代码。尽量使零件工作简单。我只是想看看我如何将用户添加到一个频道会有所帮助:)我把这个方法整理好了,只是没有粘贴所有的代码。尽量使零件工作简单。我只是想看看我如何将用户添加到一个频道会有所帮助:)
@Override
public ArrayList<String> getUsersInChannel(String channel) throws RemoteException{
    return allChannels.get(channel);   
}
allChannels.get(channel).add(username);
public void connectChannel(String username, String channel) throws RemoteException{
    ArrayList<String> ch = allChannels.get(channel);
    if (ch==null){
        ch = new ArrayList<String>();
        allChannels.put(channel, ch);
    }   
    ch.add(username);
}