簡體   English   中英

如何更新Java HashTable?

[英]How to update Java HashTable?

我有兩個哈希表和一個LinkedList順序如下:

Hashtable<Character, Hashtable<String, LinkedList<String>>> hashTab = new Hashtable(); 
Hashtable<String, LinkedList<String>> string_list = new Hashtable();
LinkedList<String> data_list = new LinkedList();

現在我有一個函數,通過它我可以在哈希表和鏈表中傳遞值

public String createPlayerAccount(String FirstName, String LastName, int Age, String Username, String Password, String IPAddress)
{
    char username_first_char = Username.charAt(0);

    try
    {
        boolean username_exists = hashTab.get(username_first_char).containsKey(Username);
        if(!username_exists)
        {
            String data_string = FirstName + " " + LastName + " " + Age + " " + Password + " " + IPAddress + playerStatus; //Pass user details to a string
            data_list.add(data_string);  //Add user details to the linked list
            string_list.put(Username, data_list);
            hashTab.put(username_first_char, string_list);
            return("Dear " + FirstName + ",  You have successfully registered");
        }
        else
        {
            return("Username already exists");
        }   
    }
    catch(Exception e)
    {
        String data_string = FirstName + " " + LastName + " " + Age + " " + Password + " " + IPAddress +" "+ playerStatus; //Pass user details to a string
        data_list.add(data_string);  //Add user details to the linked list
        string_list.put(Username, data_list);
        hashTab.put(username_first_char, string_list);
        return("Username successfully added \n ");
    }
}

默認情況下,playerStatus設置為0。 現在,我正在為Signin()創建另一個函數,在該函數中我希望將playerStatus的值更新為1。我該怎么辦?

登入():

public String playerSignIn(String Username, String Password, String IPAddress)
{
    char username_first_char = Username.charAt(0);
    try
    {
        String user_profile;
        boolean username_exists = hashTab.get(username_first_char).containsKey(Username);
        if(username_exists)
        {
            playerStatus = "1";
            //String data_string = Password + " " + IPAddress +" "+ playerStatus; //Pass user details to a string
            //data_list.add(data_string);  //Add user details to the linked list
            //string_list.put(Username, data_list);
            //hashTab.put(username_first_char, string_list);  //Add user details to the linked list
            //return();
            //hashTab.put(username_first_char, string_list);
            //user_profile = hashTab.get(username_first_char).get(Username).get(0);
            return(user_profile);
            /*String data_string = Username + " " + Password + " " + IPAddress +" "+ "1"; //Pass user details to a string
            data_list.add(data_string);  //Add user details to the linked list
            string_list.put(Username, data_list);
            hashTab.put(username_first_char, string_list); 

            String get_user_data = hashTab.get(username_first_char).get(Username).get(0);
            String[] user_record = get_user_data.split(" ");
            String users_status = user_record[5];*/

            //return("User status updated: " + user_record[5]);
        }
        else
        {
            return("Invalid username or password");
        }
    }
    catch(Exception e)
    {
        return("PAWNED");
    }
}

注意:這是代碼的服務器端。 我正在制作一個客戶端-服務器分布式系統。

如評論中所述,您需要創建一個POJO(對象類),該POJO將保存有關給定玩家的信息。 我要給那個班級球員命名。 如果您需要一個包含有關播放器信息的字符串,以便發送給客戶端,只需在Player類上使用toString()方法即可。

當我開發多人游戲時,通常在服務器端使用ConcurrentHashMap來存儲信息。 如果您正在使用的消息傳遞系統需要哈希表,那么您將對同步感到頭疼,如果您不知道自己在做什么,則可能導致死鎖。

開始重構代碼。 使用Player類之后,代碼應更具可讀性,並且應該能夠發現其他POJO也可能有用的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM