我正在寻找Java中的一个类,它具有键-值关联,但不使用散列.以下是我目前正在做的事情:

  1. 将值添加到Hashtable.
  2. 获取Hashtable.entrySet()的迭代器.
  3. 迭代所有值并执行以下操作:
    1. 迭代器的值为Map.Entry.
    2. 基于该值创建Module类型(自定义类)的对象.
    3. 将类添加到JPanel.
  4. 显示面板.

问题是,我无法控制返回值的顺序,因此无法按给定顺序显示值(如果不对顺序进行硬编码).

我会使用ArrayListVector来实现这一点,但在后面的代码中,我需要为给定的键获取Module对象,这是我用ArrayListVector无法做到的.

有人知道一个免费/开源的Java类可以做到这一点吗,或者知道一种根据添加时间从Hashtable中提取值的方法吗?

谢谢

推荐答案

我建议是LinkedHashMapTreeMap.A LinkedHashMap保持密钥按它们被插入的顺序,而A TreeMap通过元素的Comparator或自然Comparable排序来保持排序.

因为它不需要保持元素的排序,所以在大多数情况下,LinkedHashMap应该更快;根据Javadoc的说法,TreeMapcontainsKeygetputremoveO(log n)的性能,而LinkedHashMap对每种情况都有O(1)的性能.

如果你的API只期望一个可预测的排序顺序,而不是一个特定的排序顺序,考虑使用这两个类实现的接口,NavigableMapSortedMap.这将允许您不将特定的实现泄漏到API中,然后随意切换到这些特定类或完全不同的实现.

Java相关问答推荐

如何计算内循环的时间复杂度?

Cosmos Change Feed Process Lag远远超过收集中的记录数量

使用java访问具体子类特定方法的最佳方法是什么?

错误:在Liferay7.4中找不到符号导入com.liferay.portal.kernel.uuid.PortalUUID;";

调用引发泛型异常的泛型方法时出现编译错误

获取字符串中带空格的数字和Java中的字符

对Java中的通配符参数的混淆

测试容器无法加载类路径初始化脚本

MySQL数据库中未应用具有Spring数据的唯一约束

由于在生成器模式中使用泛型,lambda表达式中的返回类型错误

buildDir:File!&#的getter解决方案是什么?39.被抛弃

删除打印语句会影响功能...腐败在起作用?

EXCEL中的公式单元格显示#NAME?

在java中使用不同的application.properties-jar而不使用Spring

在实例化中指定泛型类型与不指定泛型类型之间的区别

控制器建议异常处理

谷歌应用引擎本地服务器赢得';t在eclipse上运行

简化每个元素本身都是 map 列表的列表

MapStruct记录到记录的映射不起作用

如何在java中从以百分比表示的经过时间和结束日期中找到开始日期