我想维护一组具有两个主要属性的数据:1.我可以通过数字ID快速查找对象的存在,并且2.我想对数据进行排序,但避免不必要地对其进行排序可能会很慢。对于一个更具体的例子,我有一组用户数据,其中每个用户都有一个唯一的ID(一个int)和一个唯一的用户名(一个String)。我将添加和删除用户,偶尔我想为用户生成一个易于阅读的,按字母顺序排序的列表,但是随着用户数量的增加,对数据进行排序所需的时间也随之增加。
您将如何构成?我能想到的唯一合理的方法包括创建两个单独的数据结构,并同时冗余地向BOTH结构添加/删除项目。随着我数据的增长,它将使用比单个结构更多的数据。我可能还会以这种方式引入更多错误,因为当我稍后再次添加到代码中时,我不得不提醒自己将操作重复到两种结构。换句话说,我可以拥有:
TreeMap<String,Integer> nameSortedMap = new TreeMap<String,Integer>(String.CASE_INSENSITIVE_ORDER);
和
Map<Integer,String> idMap = new HashMap<Integer,String>();
每当我添加或删除数据时,我都会在两个地图上都进行处理。如果要通过ID检索用户名,请致电idMap.get(id)或idMap.contains(id)(以查看用户是否存在)。另一方面,如果需要显示排序列表,则可以使用nameSortedMap.keySet(),该名称应该已经按照名称顺序收集,避免了每次需要排序列表时都需要进行其他工作。
我的思考过程如何?有没有更好或更简单的方法来实现这一目标?谢谢!
最佳答案
我可以想到两种方法:
使用数据库并索引两个列。数据库速度很快,并且可能非常小(请参见:SQLite),但是如果您不需要保存数据,或者如果这是唯一的用途,那么它们可能就显得过高了。
创建一个包含上述两个地图的类,该类处理所有插入和删除操作。这样,您只有一个地方要记住对两个地方进行操作。这是object oriented programming的主要卖点之一。