【问题标题】:Adding a collection of collections to an ArrayList将集合的集合添加到 ArrayList
【发布时间】:2018-02-27 04:58:04
【问题描述】:

我正在尝试制作一个程序,该程序采用带有参数名称、用户名、密码和电子邮件的 User 类来创建包含此信息的 HashMap。键将是用户的名称,值将是包含用户信息(用户名、密码、电子邮件)的 ArrayList。该类应提供创建新用户的方法,该方法可从 PasswordDB 类中使用,该类通过调用此方法创建用户数组及其信息。

这是 User 类的代码:

import java.util.HashMap;
import java.util.ArrayList;

public class User
{
    private String name;
    private String username;
    private String password;
    private String email;    
    private ArrayList<String> arr = new ArrayList<String>();
    private HashMap<String,ArrayList<String>> userInfo = new HashMap<String,ArrayList<String>>();

public User(String name, String username, String password, String email)
{
    this.name=name;
    this.username=username;
    this.password=password;
    this.email=email;
}

    public HashMap<String, ArrayList<String>> addUser()
{        
    arr.add(username);
    arr.add(password);
    arr.add(email);
    userInfo.put(name, arr);
    return userInfo;
    }
}

对于 PasswordDB 类:

import java.util.ArrayList;
import java.util.HashMap;

public class PasswordDB
{
    private ArrayList<User> database;
    private User newUser;

public PasswordDB()
{
    ArrayList<User> database = new ArrayList<User>();
}

public void newUser(String name ,String username ,String password ,String email)
{
    User newUser = new User(name, username, password, email);
    database.add(newUser.addUser());
    }
}

我在 PasswordDB 类中收到以下错误: error

我做错了什么?我怎样才能使这项工作?谢谢。

【问题讨论】:

  • database.add(newUser.addUser());改成database.add(newUser);?
  • 您正在尝试将HashMap&lt;String, ArrayList&lt;String&gt;&gt; 添加到List&lt;User&gt;User.addUser 返回 HashMap。我认为你让这件事变得比它需要的更复杂,我对你想要做什么感到困惑。
  • @ElliottFrisch 现在编译但返回 NullPointerException
  • @Matt 谢谢,我没有意识到这一点。我正在尝试使用哈希图,以便可以搜索用户以根据他们的姓名查找他们的信息。
  • ArrayList&lt;User&gt; database = new ArrayList&lt;User&gt;(); 在构造函数中隐藏字段。删除左侧的类型。 database = new ArrayList&lt;User&gt;();

标签: java arraylist collections hashmap


【解决方案1】:

你可以大大简化这个程序。用户不需要知道任何其他用户的任何信息,因此User 类中不应包含任何列表或数据库。

有一个User 类,它具有名称、用户名、密码、电子邮件等属性。这只是关于用户的数据。

然后是带有哈希映射的PasswordDB 类,只需将用户名映射到用户,您不需要所有这些额外的列表。

class User {
    private String name;
    private String username;
    // ..

    public User(String name, String username, ...) {
        this.name = name;
        this.username = username;
        // ...
    }

    public String getName() { return name; }
    // .. more getters
}

public class PasswordDB {
    private HashMap<String,User> userInfo = new HashMap<String,User>();

    public void addUser(User newUser) {
        userInfo.put(newUser.getUsername(), newUser);
    }

    // maybe you need to get a user by username
    public User getUser(String username) {
        return userInfo.get(username);
    }
}

【讨论】:

    【解决方案2】:

    您正在尝试将HashMap 添加到ArrayList

    试试下面的

    public void newUser(String name ,String username ,String password ,String email)
      {
        User newUser = new User(name, username, password, email);
        newUser.addUser();
        database.add(newUser);
      }
    

    【讨论】:

    • 为什么要创建并丢弃HashMap
    • 按照他的班级设计!我刚刚在这里写了他的异常的修复。
    • 该死!我以为你知道那是为了什么。
    【解决方案3】:

    更改您的 PasswordDB 类:

    import java.util.ArrayList;
    import java.util.HashMap;
    
    public class PasswordDB
    {
        private ArrayList<HashMap<String, ArrayList<String>>> database;
        private User newUser;
    
    public PasswordDB()
    {
         database = new ArrayList<>();
    }
    
    public void newUser(String name ,String username ,String password ,String email)
    {
        User newUser = new User(name, username, password, email);
        database.add(newUser.addUser());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      相关资源
      最近更新 更多