我需要Collection
对元素进行排序,但不会删除重复项。
我已经去了TreeSet
,因为TreeSet
实际上将值添加到支持的TreeMap
:
public boolean add(E e) {
return m.put(e, PRESENT)==null;
}
然后TreeMap使用Comparators
compare
逻辑删除重复项
我写了一个Comparator
在元素相等的情况下返回1而不是0的a
。因此,在元素相等的情况下,TreeSet
带有此元素Comparator
将不会覆盖重复项,而只会对其进行排序。
我已经为简单String
对象测试过,但是我需要一组自定义对象。
public static void main(String[] args)
{
List<String> strList = Arrays.asList( new String[]{"d","b","c","z","s","b","d","a"} );
Set<String> strSet = new TreeSet<String>(new StringComparator());
strSet.addAll(strList);
System.out.println(strSet);
}
class StringComparator implements Comparator<String>
{
@Override
public int compare(String s1, String s2)
{
if(s1.compareTo(s2) == 0){
return 1;
}
else{
return s1.compareTo(s2);
}
}
}
这种方法是好的还是有更好的方法来实现呢?
编辑
实际上,我有以下类的ArrayList:
class Fund
{
String fundCode;
BigDecimal fundValue;
.....
public boolean equals(Object obj) {
// uses fundCode for equality
}
}
我需要fundCode
最高的fundValue
我需要所有基金价值最高的基金代码
如果那是您要排序的唯一原因,我建议根本不要排序。排序主要带来 O(n log(n)) 的复杂性。查找最大值仅具有 O(n)
的复杂度,并且可以通过列表的简单迭代来实现:
List<Fund> maxFunds = new ArrayList<Fund>();
int max = 0;
for (Fund fund : funds) {
if (fund.getFundValue() > max) {
maxFunds.clear();
max = fund.getFundValue();
}
if (fund.getFundValue() == max) {
maxFunds.add(fund);
}
}
您可以通过使用Guava等第三级库来避免该代码。请参阅:如何从Guava中的List获取max()元素
问题内容: 我似乎无法使实例正常工作。我使用的代码如下: 子类 该代码输出 问题答案: 您需要覆盖。而不是这样做,您实现了一个带有signature 的方法。因此,您使用的是为相等性测试定义的默认方法。 默认实现基于对象标识,因此,该集合“允许”您添加两个在语义上相等的不同对象。
我正在检查< code>HashSet的< code>add方法。有人提到 如果该集合已经包含元素,则调用保持集合不变,并返回false。 但是方法在内部保存中的值 的方法声明 将指定值与该映射中的指定键相关联。如果映射先前包含该键的映射,则旧值将被替换。 那么,如果 的 方法替换了旧值,那么 方法如何在元素重复的情况下保持集合不变?
问题内容: 我需要解析一个json文件,不幸的是,该文件不遵循原型。我的数据有两个问题,但是我已经找到了解决方法,所以我只在最后提一下,也许有人也可以提供帮助。 所以我需要解析这样的条目: json默认解析器更新字典,因此仅使用最后一个条目。我不得不以某种方式存储另一个,我也不知道如何做到这一点。我还必须将密钥以它们在文件中出现的顺序存储在几个字典中,这就是为什么我使用OrderedDict这样做
我有 REGEX,我希望在下面排除某些字符。正确排除这些字符:£“~#¬|{} 但这些不是: @[]/?;: 因此,例如,test£test 被正确标识为无效,但test@test被错误地标识为有效。 在https://regex101.com/上测试发现问题在于括号,并指出我需要转义第一个([括号]和-[连字符],就像这样- ^[a-zA-z0-9!$%^ 有什么办法可以让这个正则表达式按照我想
我正在做一个项目,用户必须上传之前提交一个表单的图像。目前我的代码正在工作,但它选择任何格式大小,这是不需要在我的项目,所以我的目标是限制用户只选择图像文件格式定义,如jpg,jpeg和png从我希望用户只选择jpg,png和jpeg文件。 下面是我的工作代码:
null