java中的链接哈希映射

时间:2013-12-01 01:21:26

标签: java

我正在尝试制作一个项目,我遇到了以下问题:该项目与学生有关。 Student类包含3个字段id,name,grade。我必须使用linkedHashMap来表示学生集合,id是关键。 我试过这个,但我不确定是否正确,因为这个名字是一个字符串而且等级为int。

Map<Integer,ArrayList> myMap = new LinkedHashMap<Integer,ArrayList>();

你能告诉我一些如何代表这个系列的想法吗?我需要能够添加/删除学生。

3 个答案:

答案 0 :(得分:1)

为什么不从整数映射到学生?

Map<Integer,Student> myMap = new LinkedHashMap<Integer,Student>();

通过

添加学生
myMap.put(student.id(), student);

链接的哈希映射保留了插入顺序。 TreeMap会让学生按ID排序;当没有特定的顺序时,普通的HashMap避免了与LinkedHashMap相比的一些开销。

答案 1 :(得分:0)

您可以在第一个内容中添加另一个LinkedHashMap

您的声明如下:

Map<Integer, LinkedHashMap> my Map = new LinkedHashMap<Integer, LinkedHashMap>();

或者您可以使用TreeMap。

然后您可以使用putgetremove方法。请注意,您还可以使用keySetvalues进行迭代甚至containsKey

答案 2 :(得分:0)

您可以在Map

中添加自定义类

Usuario课程

public class Usuario implements Serializable {

    private String  nombre;
    private String  ciudadOrigen;
    private String  paisOrigen;
    private String  idiomaMaterno;
    private int     edad;

    public Usuario(String nombre, String ciudadOrigen, String paisOrigen, String idiomaMaterno, int edad) {
        this.nombre = nombre;
        this.ciudadOrigen = ciudadOrigen;
        this.paisOrigen = paisOrigen;
        this.idiomaMaterno = idiomaMaterno;
        this.edad = edad;
    }

    public Usuario(String nombre, String paisOrigen, String idiomaMaterno) {
        this.nombre = nombre;
        this.paisOrigen = paisOrigen;
        this.idiomaMaterno = idiomaMaterno;
    }

    public Usuario(String nombre, String ciudadOrigen, String paisOrigen, String idiomaMaterno) {
        this.nombre = nombre;
        this.ciudadOrigen = ciudadOrigen;
        this.paisOrigen = paisOrigen;
        this.idiomaMaterno = idiomaMaterno;
    }

    public String getIdiomaMaterno() {
        return idiomaMaterno;
    }

    public void setIdiomaMaterno(String idiomaMaterno) {
        this.idiomaMaterno = idiomaMaterno;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getCiudadOrigen() {
        return ciudadOrigen;
    }

    public void setCiudadOrigen(String ciudadOrigen) {
        this.ciudadOrigen = ciudadOrigen;
    }

    public String getPaisOrigen() {
        return paisOrigen;
    }

    public void setPaisOrigen(String paisOrigen) {
        this.paisOrigen = paisOrigen;
    }

    public int getEdad() {
        return edad;
    }

    public void setEdad(int edad) {
        this.edad = edad;
    }
 }

Saludo课程

public class Saludo implements Serializable {

    private String saludo;
    private String idioma;

    public Saludo(String saludo, String idioma) {
        this.saludo = saludo;
        this.idioma = idioma;
    }

    public String getIdioma() {
        return idioma;
    }

    public void setIdioma(String idioma) {
        this.idioma = idioma;
    }

    public String getSaludo() {
        return saludo;
    }

    public void setSaludo(String saludo) {
        this.saludo = saludo;
    }
}

<强>实施

public class ModeloDatos implements Serializable {

    private HashMap<Usuario, Saludo> usuariosSaludos = new HashMap<>();

    public void ingresar (Usuario usuario, Saludo saludo) {

        usuariosSaludos.put(usuario, saludo);
    }

    public String obtenerUsuarios () {

        StringBuilder stringBuilder;

        if (usuariosSaludos.isEmpty()) return "Lista vacía";

        else {

            stringBuilder = new StringBuilder("Lista de usuarios:\n");

            for (Usuario usuario : usuariosSaludos.keySet()) 
                stringBuilder.append(usuario.getNombre()).
                              append(" de ").
                              append(usuario.getPaisOrigen()).
                              append(".\n");
        }

        return stringBuilder.toString();
    }

    public String obtenerSaludos () {

        StringBuilder stringBuilder;

        if (usuariosSaludos.isEmpty()) return "Lista vacía";

        else {

            stringBuilder = new StringBuilder("Lista de saludos:\n");

            for (Saludo saludo : usuariosSaludos.values()) 
                stringBuilder.append("Se dice ").
                              append(saludo.getSaludo()).
                              append(" en ").
                              append(saludo.getIdioma()).
                              append(".\n");
        }

        return stringBuilder.toString();
    }

    public String obtenerResultados() {

        StringBuilder stringBuilder;

        if (usuariosSaludos.isEmpty()) return "Lista vacía";

        else {

            stringBuilder = new StringBuilder("Resultados:\n\n");

            for (Usuario usuario : usuariosSaludos.keySet()) {

                Saludo s = usuariosSaludos.get(usuario);

                stringBuilder.append(usuario.getNombre()).
                              append(" de ").
                              append(usuario.getPaisOrigen()).
                              append(".\n").
                              append("Nos dice ").
                              append(s.getSaludo()).
                              append("en ").
                              append(s.getIdioma()).append("\n\n");
            }
        }

        return stringBuilder.toString();        

    }
}

其中:

  • ingresar使用put方法向地图添加条目。
  • obtenerUsuarios使用keySet方法迭代地图的密钥。
  • obtenerSaludos使用values方法迭代地图的值。
  • obtenerResultados是两种方法的组合。