我想维护一组具有两个主要属性的数据:1.我可以通过数字 ID 快速查找对象的存在,以及 2.我想对数据进行排序,但避免不必要的排序,因为它可能很慢。举一个更具体的例子,我有一组用户数据,其中每个用户都有一个唯一的 ID(一个 int)和一个唯一的用户名(一个 String)。我将添加和删除用户,有时我想为用户生成一个人类可读的、按字母排序的列表,但是随着用户数量的增加,对数据进行排序所需的时间也会增加。
你会如何构建这个?我能想到的唯一合理的方法是创建两个单独的数据结构,并同时向两个结构冗余地添加/删除项目。随着我的数据增长,它将使用比单个结构更多的数据。我也可能以这种方式引入更多错误,因为当我稍后回来添加代码时,我必须提醒自己将操作复制到两个结构中。换句话说,我可以:
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(),我收集的它应该已经按名称顺序排列,避免每次需要排序列表时都需要额外的工作。
我的思考过程是怎样的?有没有更好或更简单的方法来实现这一点?谢谢!