2013-07-24 45 views
0

我有两个班。 一个DAO有用户的Arrraylist(用户User类的instace) 和另一个类,检查一个方法是否存在与我们的输入名称的用户或不 如何使用哈希映射(用户名,用户),而不是用户的Arraylist?使用HashMap中,而不是ArrayList的

public class UserDAO { 
private static UserDAO instance; 
private static String fileName = "sources/users.aaa"; 
//-------------------------------------------------------- 
private UserDAO(){ 

} 
//-------------------------------------------------------- 
public boolean storeUsers(ArrayList<User> Users){ 
    return IOFile.writeObject(Users, fileName); 
} 

//-------------------------------------------------------- 
public ArrayList<User> getUsers(){ 
    ArrayList<User> Users = (ArrayList<User>) IOFile.readObject(fileName); 
    return Users; 
} 
//-------------------------------------------------------- 
public static UserDAO getInstance(){ 
    if(instance == null) 
     instance = new UserDAO(); 
    return instance; 
} 

}

和一个方法在另一个类中,检查是否存在与我们的输入姓名或没有用户:

User user = new User(firstName, lastName, userName, password); 
      ArrayList<User> users = UserDAO.getInstance().getUsers(); 
      for (User user2 : users) { 

       if (user.equals(user2)){ 
        system.out.println ("Error!!"); 
        return; 
       } 
      } 
      users.add(user); 
      UserDAO.getInstance().storeUsers(users); 
+0

如果你想要一个对象映射到另一个,然后使用HashMap中。但要知道它是什么样子,你可能会覆盖[我的HashMap教程](http://volodial.blogspot.com/2013/07/internal-life-of-hashmap-in-java.html)首先 –

回答

2

在这种情况下,因为你只是想检查用户是否存在,你可以使用一个HashSet。一套有恒定的时间查找。因此,而不是你的循环的,这纯粹是users.contains(user)

如果您正在查找实际的User对象以外的其他对象,则可以使用地图。名称到用户的映射。

在任何一种情况下,如果您使用的集合包含您正在检查的集合,则必须正确实施equalshashCode

+0

我想使用键:用户名和值:用户的地图。 –

+0

在这种情况下,你可以使用散列表 –