Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java树集-don';不要删除重复的项目_Java_Comparator_Treeset - Fatal编程技术网

java树集-don';不要删除重复的项目

java树集-don';不要删除重复的项目,java,comparator,treeset,Java,Comparator,Treeset,TreeSet删除具有相同压缩程序值的不同项。我不想把它拿走。 有没有办法控制这一切?或者使用另一个容器类 增加: 好啊看来我不能用Set了。 出于性能考虑,我需要插入排序功能。你能做到这一点吗?谢谢大家。请引用以下内容: 不包含重复元素的集合 使用的任何衍生工具。A的主要目的是避免重复。 您可能不需要集合,或者需要不同的比较器集合定义不能有重复的条目 因此,您需要使用列表或数组等如果您想要一个SortedList,例如,您可以获取一个列表并在每次插入后手动调用Collections.sort(

TreeSet删除具有相同压缩程序值的不同项。我不想把它拿走。 有没有办法控制这一切?或者使用另一个容器类

增加: 好啊看来我不能用Set了。 出于性能考虑,我需要插入排序功能。你能做到这一点吗?谢谢大家。

请引用以下内容:

不包含重复元素的集合

使用的任何衍生工具。

A的主要目的是避免重复。
您可能不需要
集合
,或者需要不同的
比较器

集合定义不能有重复的条目


因此,您需要使用列表或数组等

如果您想要一个SortedList,例如,您可以获取一个列表并在每次插入后手动调用Collections.sort()

或者包装,例如ArrayList,以确保排序调用:

    class SortedArrayList extends ArrayList<String> {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Override
    public void add(int index, String element) {
        super.add(index, element);
        Collections.sort(this);
    }

    @Override
    public boolean add(String element) {
        boolean returnValue = super.add(element);
        Collections.sort(this);
        return returnValue;
    }

    @Override
    public boolean addAll(Collection<? extends String> c) {
        boolean returnValue = super.addAll(c);
        Collections.sort(this);
        return returnValue;
    }

    @Override
    public boolean addAll(int index, Collection<? extends String> c) {
        boolean returnValue = super.addAll(index, c);
        Collections.sort(this);
        return returnValue;
    }

    @Override
    public String set(int index, String element) {
        String returnValue = super.set(index, element);
        Collections.sort(this);
        return returnValue;
    }
}
class SorterDarrayList扩展了ArrayList{
/**
* 
*/
私有静态最终长serialVersionUID=1L;
@凌驾
公共void添加(int索引、字符串元素){
super.add(索引、元素);
集合。排序(this);
}
@凌驾
公共布尔添加(字符串元素){
布尔返回值=super.add(元素);
集合。排序(this);
返回值;
}
@凌驾

公共布尔加法(Collection即使它是一个集合,这仍然是令人困惑的,因为对象是不同的。例如,不同对象的
集合
E
在基于所使用的
比较器
转换为
树集时会丢弃一些对象。在这两种情况下,它都是一个集合,但存储的元素集将不同。在我的这一观点在文件中没有得到很好的澄清

一个简单的解决方案是,如果您可以更改比较器,则让它不返回0。例如,而不是:

public int compare(Integer o1, Integer o2) {
    return o1.compareTo(o2);
}
使用:

public int比较(整数o1,整数o2){
返回值o1
使用不返回0的比较器。@Peter Lawrey,除了在某种意义上相同的对象之外。@Tom Hawtin同意,当对象是
=
时,可以返回0,否则比较
系统。identityHashCode()
或只返回任意的
1
,用于具有相同内容但不是相同对象的对象。@Petery Lawrey
System.identityHashCode
不是唯一的。因此您仍然需要一个平局断路器(可能使用
WeakReference
s)。谢谢。但是,在插入项时,是否有支持排序的列表派生项?您始终可以使用Collections.sort(…)和原始比较器对列表进行排序。或者,您可以使用两个集合,一个集合包含元素,另一个集合包含其外观计数,即这里的multisetTry PriorityQueue或这里的MinMaxPriorityQueue
public int compare(Integer o1, Integer o2) {
    return o1 < o2 ? -1: 1;
}