我正在用Java学习集合,但是,有些集合很混乱。
根据我的理解,我已准备好覆盖图表。需要你的帮助来纠正它并正确理解它。
关于TreeMap
的另一个问题。
我读到了TreeMap
,它使用Comparator
指定的自然或自定义顺序按 KEYS 对元素进行排序。但是,在某些教程中,指定它可以按值而不是键进行排序。它是正确的还是我们应该只按键排序?
更新 对不起,如果我的问题有点含糊不清。 我假设我在每个集合中放置Customer类型的自定义对象(java类)。 在键值对集合中,我使用Customer作为键。
答案 0 :(得分:1)
对于使用自定义的集合,必须覆盖哪些方法 对象作为键,值还是元素?
没有强制要求覆盖集合类的方法。集合API提供了许多类,如List
(保留元素的顺序),Set
(消除了重复项) ),Map
(将元素存储为键值对等)..您可以根据实际使用情况直接选择和使用它们。
对于TreeMap,它是正确的还是我们应该只按键排序?
TreepMap通过排序键对元素进行排序。如果您希望按值对元素进行排序,可以通过多种方式对其进行排序here。
同样,没有强制要求按键或值排序Map
,这取决于您的项目/业务要求。
<强>更新强>
如果我想使用Customer类的hashmap,请按照书中的说明进行操作 需要覆盖hashcode并使equals方法正常工作。
是的,对于Customer
等自定义类,您需要覆盖equals()
和hashcode()
,以便集合类知道两个Customer
对象是如何相等的。例如,当您使用Set
时,为了消除重复项,Set
需要找到两个Customer
对象如何相等,以便它只能保留一个对象。
另外,另一方面,如果您想订购元素(存储在集合中),您需要覆盖Comparator中的compare
或compareTo()
来自equals()
3}}
总结一下,请参阅以下基础知识:
每当需要找到对象相等时,覆盖hashcode()
和compare()
覆盖compareTo()
或String str = "";
while ((sCurrentLine = br.readLine()) != null) {
String sCurrentLine1 = sCurrentLine.replaceAll("\\n+", "0NL0");
str = str + sCurrentLine1 + " and ";
}
System.out.println(str.substring(0,(str.length()-5)));
以了解订购要求