java - 使用什么数据结构

标签 java data-structures

我正在寻找具有以下属性的数据结构。

  • 存储 tuple<Double,Integer,Integer> 的列表.订单仅在 double .具有相同 double 值的两个元组被认为是相同的。
  • 支持重复。
  • 需要能够按升序遍历。如果有重复,后面添加的顺序应该更高。
  • 快速查找/插入
  • 快速移除,注意移除总是遵循这个模式

方法包含移除:

for(int i=list.size()-1;i>=0;i--){// assume list is in ascending order
    if(list[j:i] can be merged){
        remove list[j:i-1];
        update list[i]'s two integers;
        i = j-1;
    }
}

我目前使用 ArrayList 并对其进行排序。使用二进制搜索可以快速查找。然而,插入和删除将涉及内存中的大量副本,例如在列表前面插入会移动所有元素。

最佳答案

一个解决方案是对元组列表进行排序映射:

SortedMap<Double,List<Tuple<Integer,Integer>>>

声明行有点难看,但它会起作用。我以前曾多次使用 map 来列出 list 。它的好处是你可以从列表中删除项目,只要你的列表很短,你的移动次数就会减少。要遍历整个结构,您需要创建自己的迭代器,或调整您的原始代码。

关于java - 使用什么数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6860301/

相关文章:

java - 使用与另一个列表的整个内容匹配的条目过滤列表的内容 Java 流

java - 我们可以在指定目录下使用maven命令行构建源代码的war文件吗?

python - Python中的多对多数据结构

javascript - 在 JS 中旋转和转换数据

python - 可以进行 "select distinct X where W=w and Y=y and Z=z and ..."类型查找的数据结构

C - 释放线程中的数据结构?

java - WebView 中的 Youtube 视频无法自动播放

java - 尝试从我的客户端类发送消息到我的服务器类时获取 "Error: java.net.SocketException: Socket is closed"

java - Eclipse 未检测到已安装的 java

arrays - 使用静态范围最小查询维护的数组中单个更改的复杂性