我正在做一个程序。我将用户存储在ArrayList中,所以我有一个UserCollection类作为用户的储存类别。但是鉴于UserCollection被认为是一个数据库,数据库中的每个用户条目都应该有一个唯一的id。最初我有一个userID作为User类中的字段,但现在我试图处理UserCollection中的id部分。如果我使用一个hashmap,其中键将是id,值是User我将如何继续迭代id,以便每次一个新的User被存储到hashmap中,他们键保持从1到n的迭代量的用户。我也使用CRUD方法来存储/删除/更新用户等。
public class UserCollection{
Map<Integer, User> userMap = new HashMap<Integer,User>();
public User create(User user){
userMap.put(??,user) // not sure how to iterate the id or what to put in it
return user;
}
public User read(Integer keyID){
if(userMap.containsKey(keyID)){
return userMap.get(keyID); //something definitely wrong
}
}
//Other remaining CRUD methods after.
}
最初,我只是有一个ArrayList,其中包含用户。但因为我意识到在数据库中,用户将拥有唯一的id,所以我不知道如何处理它们。如果我在HashMap中处理它们,我还需要在用户类中有一个userID字段吗?
您可以执行以下操作以确保您的用户在类的生命周期中具有唯一的ID。
public class UserCollection
{
private static int id = 0;
private static final Object lock = new Object();
private Map<Integer, User> userMap = new HashMap<Integer,User>();
public User create (User user)
{
// only add one user at a time to the map
synchronized (lock)
{
id++;
userMap.put(id, user);
}
return user;
}
// Rest of the class
}
你在这里问了几个问题。我将依次接受他们中的每一个:
最简单的方法是使用一个静态字段来跟踪生成的最大id:
class User {
private static int largestID = 0;
private final int id = largestID++;
public int getID() {
return id;
}
...
}
这是可行的,但有很多问题。只要你存储用户
另一种方法是从您的收藏中为现有客户找到最大的id。以下示例代码使用Java 8:
class UserCollection {
private final Map<Integer,User> users = new HashMap<>();
public int nextID() {
return users.keySet().stream()
.mapToInt(n -> n).max().orElse(-1) + 1;
}
}
这是低效的,但对许多应用程序来说可能已经足够好了。
你有两个选择。或者将其存储在类中,并提供获取ID的机制(如上所述)。或者确保与用户相关的所有内容都存储并返回ID,而不是对对象的引用。这允许该方法的客户端使用该ID访问用户。
这两个都是合法的解决方案。如果使用第一个(将ID存储在类中),则应更改将用户添加到集合的方法:
class UserCollection {
public void addUser(User user) {
users.put(user.getID(), user);
}
}
如果使用第二个字段,则ID字段必须是最终字段,因为客户端依赖于它而不会更改。
问题内容: 我有一个HashMap,每次我获得迭代器时,我都希望以不同的随机顺序迭代它们的键值对。从概念上讲,我想在调用迭代器之前对地图进行“混洗”(或者,如果需要,可以对迭代器进行“混洗”)。 我有两种选择: 1)使用LinkedHashMap的方法,并在内部保留条目列表,将其随机洗净,并在调用迭代器时返回该视图。 2)使用map.entrySet(),构造一个ArrayList并在其上使用sh
有点初学者的问题但是... 我有一个从数据库返回的ResultSet对象-3列30行。 我检索以下数据集: null 我知道这应该不难,我只是在努力寻找迭代HashMaps的ArrayList的最佳方法
在javascript函数中尝试通过传递键迭代映射时,如下所示: 我得到的是空白值。但是当我硬编码key***user1***的值时,它就起作用了。 有人能帮我一下吗?
我正在尝试迭代作为参数传递给jrxml的<code>HashMap</code>的值,在<code>HashMap</code>中,这些值作为<code>List</code>传递。 例 我如何在jasper report Jr XML中迭代这些< code>List?
问题是如何使用方法在HashMap中pritn值=1的图书?在代码中,ive删除了数组中的书籍,这样代码就可以更短。
我想为可用于查询地图的每个键获取“规范”键对象。看这里: HashMap使用的是相同的多个唯一对象。所以我想从地图中获取实际的密钥,无论使用哪个对象来查询地图,它都将始终是相同的。 有没有办法从地图中获取实际的关键对象?我在界面上看不到任何东西,但可能是我忽略了一些聪明的技巧? (迭代所有条目或键不算数。)