标签: comparable

在PriorityQueue中维护条目序列

我试图在Java中使用PriorityQueue.

我有一些自定义对象,我以这种方式将它们添加到队列中:

Pet pet1 = new Pet();
Pet pet2 = new Pet();
Pet pet3 = new Pet();

PriorityQueue<Pet> queue = new PriorityQueue<Pet>();
queue.offer(pet1);
queue.offer(pet2);
queue.offer(pet3);
Run Code Online (Sandbox Code Playgroud)

此时,我意识到我的Pet对象必须实现Comparable才能从PriorityQueue获取ClassCastException.所以我让我的Pet实现Comparable,然后只返回0覆盖copmareTo(obj)方法.

但奇怪的是这里.当我...

queue.poll();  //return: pet1  queue: pet3, pet2
queue.poll();  //return: pet3  queue: pet2
Run Code Online (Sandbox Code Playgroud)

因为我按照pet1,pet2和pet3的顺序添加了它们,为什么在我第一次调用poll()时,它会对我的宠物序列进行排序?然后整个事情变得不再是一个队列,因为它的输入序列没有被保留,不是吗?

我怀疑它可能与Comparable接口和compareTo(obj)方法有关.但我所需要的只是保持其输入序列,所以我真的不需要比较任何东西或任何东西.

如何在队列中维护其输入序列?

谢谢!

java queue priority-queue comparable

0
推荐指数
1
解决办法
670
查看次数

Java:实现可比较但有太多条件ifs.我该如何避免它们?

我有一个list实现的对象Comparable.

我想对这个列表进行排序,这就是我使用它的原因Comparable.

每个对象都有一个字段,weight由3个其他成员int变量组成.

具有最多的对象的compareTo返回. 最重的不仅仅是如果 1weight

weightObj1.member1 > weightObj2.member1  
weightObj1.member2 > weightObj2.member2  
weightObj1.member3 > weightObj2.member3
Run Code Online (Sandbox Code Playgroud)

但实际上有点复杂,我最终得到的代码有太多的条件ifs.

如果weightObj1.member1 > weightObj2.member1持有,那么我在乎weightObj1.member2 > weightObj2.member2.

反之亦然.

否则,如果weightObj1.member2 > weightObj2.member2持有,那么我关心weightObj1.member3 > weightObj2.member3,反之亦然.

最后,如果weightObj1.member3 > weightObj2.member3持有AND,如果满足特定条件,则weightObj1获胜,反之亦然

我想知道有这样的设计方法吗?

java design-patterns if-statement comparable comparator

0
推荐指数
1
解决办法
245
查看次数

如何实现:interface MySortedCollection <T extends Comparable <T >>

我有以下界面:

interface MySortedCollection<T extends Comparable<T>> {
    boolean isElement(T t);
    void insert(T t);
    void printSorted();
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用AVLTree来实现接口:

public class AVLTree<T> implements MySortedCollection{

  private AVLNode<T> tree=null;

  public AVLTree (){
  } 

  public boolean isElement(T t){

  }


  public void insert(T t){
    if(tree==null){
      tree= new AVLNode<T>(t);
    }
  }

  public void printSorted(){}

}
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误:

error: AVLTree is not abstract and does not override abstract
method insert(Comparable) in MySortedCollection 
public class AVLTree<T> implements MySortedCollection{
Run Code Online (Sandbox Code Playgroud)

怎么了?

java interface comparable

0
推荐指数
1
解决办法
367
查看次数

为什么我不能将我的File对象插入为可比较的?

我得到一个错误符合theTree.insert(new File("a", 1));:The method insert(Comparable) in the type Tree is not applicable for the arguments (File).

当我尝试施放时,theTree.insert((Comparable) new File("a", 1));我得到了其他错误:E xception in thread "main" java.lang.ClassCastException: File cannot be cast to java.lang.Comparable at TreeApp.main(tree.java:134).

为什么我不能传递这个对象?

我的目标:

class FileObject
{
    public String name;
    public int size;

    File(String a, int b)
    {
        this.name = a;
        this.size = b;
    }
}
Run Code Online (Sandbox Code Playgroud)

java oop object comparable

0
推荐指数
1
解决办法
145
查看次数

在Java 1.5和Java 1.7中覆盖'compare()'时不返回0的缺点

这是我写的比较器,用于根据成本对节点进行排序.

public class MyCostComparator implements Comparator<Node>{
    public int compare(Node a, Node b){
        if(a.pathCost > b.pathCost)
            return 1;
        else
            return -1;
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现它的行为在我的机器(Java 1.7)和Uni的服务器(Java 1.5)上是不同的.但是,当我做到它:

if(a.pathCost >= b.pathCost) ,它似乎在1.5上工作正常,但1.7的另一种方式.

另外,当值相等时,NOT返回零的缺点是什么?

java compare comparable comparator

0
推荐指数
2
解决办法
213
查看次数

创建一个集合作为密钥的地图?

是否可以创建一个密钥是Collection(任何类型的集合)的映射?

如果我在大多数常见的收藏品上尝试它,我被告知收藏品不能用于比较.

我一直在尝试为自定义集合编写compareTo函数,但我很挣扎.

要么我需要编写compareTo,要么我需要找到一个接受地图接受的集合/集合的预制地图.

如何在地图上将集合用作关键字?我已经查看了Stack溢出,我已经多次搜索过这个问题,但我从来没有找到一个可靠的解决方案!


我想这样做的原因是我在Java中编写了一个模拟卡改组的'shuffle'模拟.我希望能够计算特定手(建模为集合)出现的次数.它看起来像这样:

   H4,C3,D2: 8  
   H9,D6,S11: 10  
   ......
Run Code Online (Sandbox Code Playgroud)

java collections map comparable

0
推荐指数
1
解决办法
134
查看次数

为什么我的通用实现不起作用?(扩展Comparable <?super T >>)

我正在实现一个BinaryNode<T>包含信息的二进制搜索树.在我的树类中,我有这行代码:

public class BST<T> implements BSTInterface<T extends Comparable<? super T>>
Run Code Online (Sandbox Code Playgroud)

这会导致许多错误,例如:

BST.java:10: error: > expected
public class BST<T> implements BSTInterface<T extends Comparable<? super T>>
                                          ^
BST.java:10: error: <identifier> expected
public class BST<T> implements BSTInterface<T extends Comparable<? super T>>
                                                                           ^
Run Code Online (Sandbox Code Playgroud)

我不确定为什么这不起作用,因为这行代码适用于我的界面.任何帮助将非常感激!我可能犯了一些愚蠢的错误.

java generics comparable

0
推荐指数
1
解决办法
219
查看次数

Java - 在重写Comparable的compareTo方法后无法对用户定义的数组进行排序

所以,我只是试图测试如何compareTo在我自己的类型上使用该方法,并且即使是最简单的情况也无法使它工作.我的代码(自解释)在下面(它在用户定义的类型下创建一个15 - > 1的'数字'数组TestType.我希望它自然地排序.

public class TestType implements Comparable<TestType> {

public int n;

TestType(int _n) {
    n = _n;
}

@Override
public int compareTo(TestType otherType) {
    return this.n < otherType.n ? -1 : (this.n > otherType.n ? 1 : 0);
}

public static void main(String[] args){
    TestType[] a = new TestType[15];
    for(int i = 0; i < 15; i++){
        a[i] = new TestType(15 - i);
        System.out.println(a[i].n);
    }
    a.sort();
}
}
Run Code Online (Sandbox Code Playgroud)

如果你能看出它为什么不起作用,请告诉我:).

java sorting overriding compareto comparable

0
推荐指数
1
解决办法
113
查看次数

Java Generics的问题具有可比性

我正在尝试做一个非常简单的类,以便返回集合的最小值.这是我的代码:

public class Min_Comparable <T extends Comparable<? super T>> {

    public  T min(Collection<? extends T> c){
        Iterator<? extends T> it = c.iterator();
        T min = it.next();
        while(it.hasNext()){
            if(min.compareTo(it.next()) > 0 ){
                min = it.next();
            }
        }
        return min;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的主要内容:

public class Main {

    public static void main(String[] args) {
        Min_Comparable test = new Min_Comparable();
        ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(6);
        list.add(0);
        list.add(5);
        list.add(2);

        System.out.println(test.min(list));

    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的错误:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.ArrayList$Itr.next(ArrayList.java:854)
    at MidTerm.Min_Comparable.min(Min_Comparable.java:16)
    at MidTerm.Main.main(Main.java:20) …
Run Code Online (Sandbox Code Playgroud)

java generics comparable

0
推荐指数
1
解决办法
50
查看次数

如何实现可比接口以及为什么要实现它

覆盖Comparable Interface的compareTo()方法的最佳方法是什么?另外,为什么我们在没有实现的情况下编写自己的compareTo()方法时需要实现Comparable Interface.以下面的Seat类为例:

public class Seat {
        private final String seatNumber;
        private double price;

        public Seat(String seatNumber, double price) {
            this.seatNumber = seatNumber;
            this.price = price;
        }

        public int compareTo(Seat seat) {
            return this.seatNumber.compareToIgnoreCase(seat.getSeatNumber());
        }
}
Run Code Online (Sandbox Code Playgroud)

上面的工作虽然我们没有实现Comparable Interface,但为什么要实现它呢?

java comparable

0
推荐指数
1
解决办法
109
查看次数