gpt4 book ai didi

java - Put 方法在 TreeMap 的实现中

转载 作者:行者123 更新时间:2023-11-29 09:09:16 26 4
gpt4 key购买 nike

我正在实现一个名为 MyTreeMap 的 TreeMap 类,put 方法给我带来了一些麻烦。在测试期间,它没有更新已经存在的键的值,而是似乎完全清除了节点。这是代码:

public class MyTreeMap<K extends Comparable<? super K>,V> extends AbstractMap<K,V>  {

K key;
V value;
int height;
MyTreeMap<K,V> left,right;
int size;

public V put(K key, V value) {

if(this.isEmpty()) {
this.key = key;
this.value = value;

this.size++;
setHeight();

return null;
}

else if(this.key.compareTo(key) == 0) {
V temp = this.value;
this.value = value;
return temp;
}

else if(this.key.compareTo(key) > 0) {
if(this.left == null) {
this.left = new MyTreeMap<K,V>(key,value,null,null);
this.size++;
if(left.height > right.height + 1 || right.height > left.height + 1)
restructure(this);
setHeight();
return null;
}
else
return this.left.put(key, value);
}
else {
if(this.right == null) {
this.right = new MyTreeMap<K,V>(key,value,null,null);
this.size++;
if(left.height > right.height + 1 || right.height > left.height + 1)
restructure(this);
setHeight();
return null;
}
else
return this.right.put(key, value);
}
}

这是测试,第一个 assertEquals 通过,第二个没有,失败跟踪显示在该行的注释处

@Test
public void putTest2() {
TreeMap<String,LinkedList<Integer>> actual = new TreeMap<String,LinkedList<Integer>>();
MyTreeMap<String,LinkedList<Integer>> test = new MyTreeMap<String,LinkedList<Integer>>();

LinkedList<Integer> actualList = new LinkedList<Integer>();
actualList.add(0);
actualList.add(4);

LinkedList<Integer> testList = new LinkedList<Integer>();
testList.add(0);
testList.add(4);

actual.put("hello", actualList);
test.put("hello", actualList);

assertEquals(actual, test); //this part passes, indicating that it adds new keys correctly

LinkedList<Integer> tempList;

tempList = actual.get("hello");

tempList.add(6);

actual.put("hello", tempList);
test.put("hello", tempList);

assertEquals(actual, test); //this part fails, fail trace: expected:<{hello=[0,4,6,6]}> but was <[]>
}

如果您能帮助我解决这个错误,那将很有帮助。谢谢。

最佳答案

在这种情况下,assertEquals(a, b) 测试两个 Map 参数是否是同一个对象,而不是它们包含相同的值

你的类和 TreeMap 都没有实现 equals() 所以使用了 Object 类的默认实现,它只返回 a == b

看看 Hamcrest library用于按值(value)有意义地比较集合。

关于java - Put 方法在 TreeMap 的实现中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13221192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com