- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开展一个项目,该项目涉及对某些工作的数据集进行少量组合和关联,并且已经卡住了一段时间。
我有一些数据组,它们与项目中的其他数据组类似。我有一个组名称的数组列表。我将这些相似的组与其他数据集进行比较,描述相似的事物。 (组的集合,与自己集合中的其他组相似)。
我一直在尝试使用以下方法解决这个问题:
HashMap<ArrayList<String>, ArrayList<String>>
事实证明,当找到另一个关系时,添加另一个组(按名称、字符串)非常困难。
如果我从每个数据集中找到另一个组并想要添加到当前的 ArrayList(这就是我使用 ArrayLists 的原因),它会创建另一个条目,其中新的键和值与之前的相同,但添加了每个 ArrayList 中的元素。
这是当前的相关代码:
...
for(ArrayList<String> similarGroupsDataset : map.keySet()) {
...
ArrayList<String> value = map.get(similarGroupsDataset);
ArrayList<String> key = similarGroups;
value.add(groupToAdd);
key.add(groupToAdd2);
map.remove(similarGroupsDataset);
map.put(key, value);
}
将ArrayList键和Arraylist值存储到变量中,添加新找到的数据,删除旧条目,并添加更新的版本。
由于某种原因,这似乎不会删除没有新添加的找到数据的条目。
所以如果我打印出 map ,它看起来像({1,2},{a,b}) , ({1,2,3},{a,b,c})它应该是什么样子({1,2,3} , {a,b,c}),删除不相关的条目。其中 dataset1 中的 1,2 相似,它们仍然与 dataset2 中的 a,b 相似,等等(如果有意义的话)。
我已经尝试过
map.get(relevantGroupFromDataset2).add(data)
//adds the newly found similar group to the list of groups
//which are all similar to eachother, from dataset1.
这有时有效,但似乎只适用于值,而不适用于键。
最后,我的目标是使用新标识符将这些组绑定(bind)在一起的标识符来重新制作这些数据集,而不是使用当前标识符,因为当前标识符不能按照我想要的方式将它们绑定(bind)在一起。
我在这里做错了什么吗?在这种情况下有没有更好的数据结构可以使用? HashMap 或类似的结构是可行的方法吗?
最佳答案
If I find another group from each dataset and want to add to a current ArrayList (which is why I am using ArrayLists), it creates another entry, where the new key and value are the same as the previous but with the added element in each ArrayList.
您使用 ArrayList 作为键。
在映射中,键是通过其 hashCode()/equals()
方法检索的。
因此,当您在此处更改 ArrayList 键的内容时:
ArrayList<String> value = map.get(similarGroupsDataset);
ArrayList<String> key = similarGroups;
value.add(groupToAdd);
key.add(groupToAdd2); // <-- here
hashCode()
和 equals()
将不再产生相同的结果。
它被视为 map 的新键。
因此 map.put(key, value);
将添加一个新元素。
为您的实际代码提供一个好的解决方法并不明显,因为 map 执行的逻辑和您期望的内容确实不清楚。
例如:
value.add(groupToAdd);
key.add(groupToAdd2);
要么是一个非常糟糕的命名,要么您仅使用 map 的键值组进行填充。
总体思路是,您不应在映射中使用在将键添加到映射后 hashCode()/equals()
结果可能会发生变化的键。
要实现它:
将值与 ArrayList 键一起放置在您知道该键不会再被修改的时间。
删除该键的值,然后使用新键再次添加该值。
无论如何,为了避免这种错误,您应该为键创建一个不可修改的列表并将其传递到映射中:
map.put(Collections.unmodifiableList(keys), ...);
关于java - 如何在 Java 中持续更新 Key 和 Value 均为 ArrayList 的 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45397525/
将一个数组列表分配给另一个数组列表与在两个数组列表之间使用 addAll 方法有什么区别? 1 > arrayList = arrayList;//应该将后面的arrayList的值分配给第一个。 2
所以我在将 ArrayList 添加到我的 ArrayList 时遇到了一些问题。将其想象成一张 table 。 下面是一些示例代码: ArrayList currentRow = new Arra
我一直在尝试转换 ArrayList> to ArrayList> 的字符串 这是我尝试构建的代码。 public void convertString (ArrayList> templist) {
我有一个 ArrayList (alal) 和一个 ArrayList(al) 的 ArrayList。我想将 al 插入 alal,但我希望 alal.get(0) 包含 al 拥有的所有内容以及添
很抱歉标题太长,如果您能想到更好的标题,请告诉我! 我正在做的是尝试创建一个 ArrayList 的 ArrayList 并将 ArrayList 逐个添加到其中。两个AL>我所拥有的称为三角形和正方
我有带有值的 mList2。存在具有相同 id 的值。如何获取具有相同 id 的对象分组的 List 或 ArrayList 并将其添加到 ArrayList>? List mList2 = list
我正在创建一个 ArrayList的 ArrayList并添加 ArrayLists给它。但每次我对 ArrayList 进行更改时, 它反射(reflect)在 ArrayList 中. 示例: L
谁能解释一下ArrayList之间的区别是什么? , ArrayList和 ArrayList是什么时候使用它们?它们在实现层面上是相同的还是各自具有不同的含义? 最佳答案 ArrayList 特别是
这个问题在这里已经有了答案: Java generics: List> = new LinkedList>() is prohibited? (3 个答案) 关闭 9 年前。 为什么这段代码可以编译
我的 arraylistS 在覆盖数组列表中的行为类似于同一个实例。 我用其中一个来操作 i=0; manupulate((ArrayList)theCoveringRootArrayList.get
我们遇到这个错误 java.lang.NullPointerException at java.util.ArrayList.(Unknown Source) at de.mystuf
据我了解,ArrayList 类继承其父“List”类的 equals() 函数来查找两个成员对象是否相同。这是否意味着“contains()”线性搜索(使用“equal”)来查找 ArrayList
这个问题已经有答案了: What is the diamond operator in Java? (2 个回答) 已关闭 7 年前。 正如标题所说,在Java中,这两种语句有什么区别吗? 通常我都能
我正在尝试求解帕斯卡三角形。我有两个用 Java 编写的代码片段,第一个创建 inner ArrayList 几次并且对我来说效果很好。 但是在代码的第二个版本中,如果我修改 inner ArrayL
正如标题所示,我有两个 ArrayList。奇怪的是,在一个数组列表上设置一个值会改变另一个数组列表的值。 一些信息:这些是 Entry 类型的 ArrayList,每个列表都包含一个金额和一个值(这
我已经添加了一个项目到列表 a,然后添加了列表 a 到列表 b 并再次做了同样的事情。 我的问题是,如果我打印 b.get(0) 和 b.get(1),我会得到相同的列表,这两个项目都是 “一”和“二
我正在创建一个 ArrayList of ArrayList of ArrayList 的 ArrayList 并按以下方式填充它。它正确地填充它。我已经通过调试和 println 弄清楚了这一点。但
实现可以在 Arraylist 和 Integer 中存储任何级别的 ArrayList 的 ArrayList 的最佳方法是什么。 List> list = ArrayList(); 仅允许列表中最
在下面的示例中,我将如何将 ArrayList al4 的内容与其他 ArrayList 中的任何一个进行比较?以同样的方式,我将 al1 与 al2 进行了比较。 import java.util.
好的,所以我之前发布了一个线程,它回答了我的很多问题并帮助我改进了我的代码,但是,我遇到了另一个问题,我不知道为什么,但我认为也许该副本只是指向原始对象..(尽管我已尽力避免这种情况) 在我的游戏代码
我是一名优秀的程序员,十分优秀!