java - 需要建议算法以从列表中获取对象

标签 java algorithm

我有一个对象列表:

class MyObj{
String name;
int value;
...
}

此列表中的对象可以具有相同的名称,但具有不同的值。

List<MyObj> list = new ArrayList<>();
list.add(new MyObj("name1", 31));
list.add(new MyObj("name1", 442));
list.add(new MyObj("name2", 213));
list.add(new MyObj("name1", 31));
list.add(new MyObj("name2", 341));
list.add(new MyObj("name3", 131));

我的目标是制作另一个列表,其中没有同名的对象。并将所有相同对象的值添加到新对象中。

像这样:new MyObj("name1", 31+442+31) ...

我想不出正确的算法,如何获得所有“重复”的对象?

最佳答案

我会为此使用 map :

map = new HashMap()
for el in list:
  if map.get(el.name) == null:
    map.put(el.name, el)
  else
    map.put(el.name, new El(el.name, el.value + map.get(el.name).value))
result = map.values()

这个算法的复杂度 O(n*hashCodeOfString())。基本上是 O(n)

关于java - 需要建议算法以从列表中获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43591585/

相关文章:

java - 从 Java 中的字符串中获取第一个字母的最佳方法是什么,返回为长度为 1 的字符串?

java - 如何避免使用 spanned fromHtml 的图像?

arrays - 如何从数组中删除重复项

android - 在报警管理器中删除报警

java - 创建全局 map Java

java - 从旧MySQL数据库迁移数据

java - 扫描仪抛出 null 的 InputMismatchException

algorithm - 一个动态规划问题

java - tic tac toe 将运行时间减少到 O(N)

java - 返回可以用输入字符的子集组成的单词列表中的所有单词的集合