从ArrayList转到Hashmap

时间:2016-06-29 22:58:50

标签: java arraylist hashmap

我是Java的新手,我正在尝试使用以下工作代码并将我的ArrayList转换为Hashmap。我的困惑是因为它们根本不同。由于使用键/值对的hashmap我不太了解我这样做,因为我已经工作的程序。对不起,如果这是一个愚蠢的问题,我想我很困惑我需要做什么。

这是我使用ArrayList的类:

感谢您的帮助。

import java.util.ArrayList;
import java.util.Scanner;

//new class ArrayMessage
public class ArrayMessage {

//new method shoutOutCannedMethod returning a String
public String shoutOutCannedMessage() {

    // create some variables
    int arraySize = 10;
    String displayUserMessage = "";
    String userMessage = "";
    String goAgain = "yes";

    // setup scanner to store input
    Scanner input = new Scanner(System.in);

    // create arrayList
    ArrayList<String> message = new ArrayList<String>();

    // start loop
    while (!goAgain.equals("no")) {
        // clear out arrayList
        message.clear();

        // ask the user for 10 messages as long as the counter is less than
        // the size of the array
        for (int counter = 0; counter < arraySize; counter++) {
            System.out.printf(counter + 1 + ": Please enter a message: ");
            // save user message to userMessage
            userMessage = input.nextLine();
            // add users message to arraylist
            message.add(userMessage);

        }

        // ask the user if they want to to load different messages into
        // arraylist
        System.out.print("Messages have been loaded? Would you like to reload? Type 'yes' or 'no': ");
        goAgain = input.nextLine(); // store input
    }
    // ask the user to choose which message they want displayed
    System.out.print("Please enter the number of the message you would like displayed: ");
    userMessage = input.nextLine();
    // store users message into variable to be used later
    displayUserMessage = message.get(Integer.parseInt(userMessage) - 1);

    input.close();
    // return userMessage
    return displayUserMessage;

}

}

这是我的主要课程:

public class ShoutBox {

//main method
public static void main(String[] args) {

    //call ArrayMessage class 
    ArrayMessage myMessage = new ArrayMessage();
    //call shoutOutCannedMessage method 
    String userMessage = myMessage.shoutOutCannedMessage();
    // display message selected by user
    System.out.printf("Your selected value is " + userMessage + "\n");


}

}

2 个答案:

答案 0 :(得分:2)

我假设您将使用ArrayList中元素的索引作为键,并将数组中的实际元素用作HashMap中的值。

希望有所帮助!

答案 1 :(得分:0)

如名称所示,ArrayList是一个Elements列表(内部使用一个数组,有时会调整大小)。

另一方面,HashMap是元素和键之间的映射。这意味着:你没有列表,只有一个键列表,每个键都指向一个元素(内部表示有点困难)。所以这不是一个简单的列表,不应该用于列出内容,而是在对象之间创建链接。

例如,如果要将游戏的Player对象分配给玩家的聊天名称,可以创建一个HashMap,它将Strings作为键,将Players作为对象保存:

Ann -> Player instance of Ann
Bob -> Player instance of Bob
Clara -> Player instance of Clara
...

例如,当您创建面向播放器的聊天命令时,这很有用:

/teleportto Clara

现在你可以像这样得到Clara的玩家对象:

playerHashMap.get("Clara")其中clara是聊天的参数,此调用将返回Clara的玩家实例。

所以不要用地图替换列表,这些是不同的数据结构。