标签: comparable

为什么Collections.binarySearch()使用这个可比较的?

我有这个Player实现Comparable接口的类.然后,我有一个ArrayListPlayer秒.我正试图binarySearch()Players 列表中找到一个Player,但Java给了我一个" cannot find symbol: method binarySearch(java.util.ArrayList< Player>,Player)".

这个Player类:

class Player implements Comparable {

    private String username;
    private String password;
    Statistics stats;

    //Constructor, creates a new Player with a supplied username
    Player(String name) {
        username = name;
        password = "";
        stats = new Statistics();
    }

    //Accessor method to return the username as a String
    String getName() {
        return username;
    }

    String getPassword() {
        return password; …
Run Code Online (Sandbox Code Playgroud)

java generics collections binary-search comparable

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

可比较和泛型

创建此类时..

public static class TreeNode<E extends Comparable<E>>
Run Code Online (Sandbox Code Playgroud)

什么<E extends Comparable<E>>意思?

java generics comparable

1
推荐指数
2
解决办法
648
查看次数

Java - 使用Comparable的静态通用类型

好吧,所以我一直在尝试实现一个默认情况下使用可比数据类型的简单二叉搜索树.

忽略我在课堂上的所有其他方法,这是我认为非常标准的一般设置:

public class BSTNode<E extends Comparable<? super E>>{
     E data;
     BSTNode<E> left;
     BSTNode<E> right;
     //and I'm trying to define a static method(inside of the class) like this:
     public static <E> String displayAscending(BSTNode<E> node){} 
}
Run Code Online (Sandbox Code Playgroud)

但编译器并不喜欢它.现在,我对通用类型有点新意,所以我将解释我对它的作用的理解,这可能有助于你弄清楚我的想法有什么问题.

E extends Comparable所以基本上是一个对象E,它是Comparable的扩展.可比较的元素是E的祖先,它本质上是一种抽象的方式,可以使用Comparable接口将E与其他元素进行比较.

然后在我的静态方法中,我试图以递归方式传递BSTNode.我似乎无法理解为什么它不起作用.我知道如果我通过BSTNode<?>它工作正常,但这似乎很危险.如果有人可以向我解释为什么这不起作用我可以尝试找到另一种解决方案.

java generics static types comparable

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

Java:如何使用compareTo方法检查2个节点的顺序

我正在编写一个编程任务,我可以使用一些帮助来理解compareTo方法.

赋值的一个问题是将传入元素添加到列表中.如果列表已排序,我应该将新节点放在正确的位置.列表可以按升序或降序排序.我想我可以通过比较头节点和节点之后(node.getNext())检查哪个是顺序,但我不确定.我不确定的代码行如下:

if(head.getContent().compareTo(tp.getContent())==1)
Run Code Online (Sandbox Code Playgroud)

head是第一个节点是通用数据类型T,已经添加了.tp是head.getNext()只是为了节省空间而且也是通用数据类型T,因为我确信我会再次输入它.我没有在程序上编写compareTo方法,因为教授告诉我只需调用compareTo方法来比较另一种通用数据类型.另外,我不确定两者之间的区别:

extends Comparable<T>
Run Code Online (Sandbox Code Playgroud)

implements Comparable<T>
Run Code Online (Sandbox Code Playgroud)

但是这项任务要求我使用第一个.

如果头节点元素是1而下一个是3,那么if语句的输出是什么?对或错?

java list compareto comparable

1
推荐指数
1
解决办法
2万
查看次数

二进制搜索方法数组Java

我正在尝试有效地搜索天气,子类实现了一个名为字符串的方法_szMethodName.我可以通过实现获得子类实现的所有方法的数组Method[] _arrClassMethodsList = class.getMethods();.然后,我可以将方法的名称与我要查找的函数的stringName进行比较,以确定天气与否实现该特定方法.目前我在for循环中工作,但随着子类的增长,这会变慢.

对于Loop实现:

for (Method method : class.getMethods()){
       if(method.getName().equals(_szMethodName)){
          //method exists in subclass
          break;
      }
}
Run Code Online (Sandbox Code Playgroud)

方法数组 class.getMethods()按字母顺序排序.(仅限Java> = 7).我希望通过在数组上使用二进制搜索或其他优化而不是使用for循环来利用它.但是,我还没有弄清楚如何在阵列上实现Java的二进制搜索功能.我曾尝试使用比较器或可比较但尚未取得成功.我最近的比较器实现如下,但有一些我尚未解决的错误.

目前尝试使用比较器:

Comparator<Method> c = new Comparator <Method>() {
    public int compare(Method method, String string) {
        return method.getName().compareTo(string);
    }
};

Method[] _arrClassMethodsList = class.getMethods();
int index = Arrays.binarySearch(_arrClassMethodsList, _szMethodName, c);
Run Code Online (Sandbox Code Playgroud)

任何有关如何使这项工作的帮助或示例将不胜感激.谢谢!

java reflection binary-search comparable comparator

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

通用类型扩展接口,无法访问接口方法而无需警告

如果我有一个泛型类,

public class Graph<K, V extends Comparable> {
     ...
 }
Run Code Online (Sandbox Code Playgroud)

我的理解是,任何类型的对象V都具有可比性,因为它扩展了Comparable接口.现在我想HashMap<K, V>在课堂上使用.V我的地图中的类型对象仍应具有可比性.我声明了一个方法:

public V getMin(HashMap<K, V> map, V zero) {
     V min = zero;
     for (V value : map.values()) {
         if (value.compareTo(min) < 0) {
            min = value;
         }
     }
     return min;
}
Run Code Online (Sandbox Code Playgroud)

编译时,我收到警告

warning: [unchecked] unchecked call to compareTo(T) as a member of the raw type
Comparable

if (value.compareTo(min) < 0) {

where T is a type-variable:
T extends Object declared in interface …
Run Code Online (Sandbox Code Playgroud)

java generics hashmap comparable

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

找不到符号 - 方法错误

我正在努力学习泛型类和实现.

我正在尝试创建一个扩展ArrayList的泛型类(我知道这是不好的做法,这只是我必须要做的事情).我想使用类似的方法对arrayList中的条目进行排序(我不允许使用.sort().这是扩展类:

import java.util.ArrayList;
import java.util.*;

/**
 * extending to ArrayList
 */
public class SortedArrayList<E> extends ArrayList<E> 
{

/**
 * Constructing the super
 */
public SortedArrayList()    
{
   super();

  }

  public  void insertAndSort (E element){
  if (isEmpty()){
      add(element);
    }

  for ( int i = 0; i < size(); i++){
      E otherElement = get(i);
      if(element.compareTo(otherElement) > 0){
          add(i, element);
        }
      if(element.compareTo(otherElement) < 0) {
          add(i+1, element);
        }
    }

}

}
Run Code Online (Sandbox Code Playgroud)

我想实现的类进行排序对象的compareTo方法,但是当我尝试编译SortedArrayList类它返回一个错误说"无法识别的符号 - 方法的compareTo(E)".我知道那是因为"元素"实际上不是一个要调用的对象,它意味着是通用的.有没有办法告诉编译器compareTo()方法是从一个现在不存在的对象调用的,但是它会被调用吗?

java generics extends comparable

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

使用Collections.sort()时出错

我想知道为什么我在尝试对List进行排序后出现错误.当我尝试对包含"Student"对象的列表进行排序时,会发生错误.

import java.lang.reflect.Array;
import java.util.*;
import java.util.ArrayList;

public class mainProgram {
    public static void main(String[] args) {
        List<Student> classStudents = new ArrayList<Student>();

    //Add 4 students to List
        classStudents.add(new Student("Charles", 22));
        classStudents.add(new Student("Chris", 25));
        classStudents.add(new Student("Robert", 23));
        classStudents.add(new Student("Adam", 21));

    //sort and print
        Collections.sort(classStudents);    //Why does this not work?
        System.out.println("classStudent(Sorted) ---> "
        + Arrays.toString(classStudents.toArray()));
    }
}
Run Code Online (Sandbox Code Playgroud)
class Student implements Comparable<Student>{
    // fields
    private String name;
    private int age;

    //Constructor
    public Student(String name, int age){ 
        name = name;
        age = age;
        } …
Run Code Online (Sandbox Code Playgroud)

java sorting comparable comparator

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

如何在Java中发送多个参数进行compareTo过滤排序类型和排序依据?

我没有使用Java 8,而是使用Java 6

我想向程序发送参数进行排序

1)(按数量)或(按desc)和

2)上升或下降。

无法了解如何在compareTo()中实现此检查

以下是Javacode:

package no.java6.listsort;
public class Fruit implements Comparable<Fruit>{

private int quantity;
private String desc;

public Fruit()
{   
}
public Fruit(String desc, int quantity)
{
    this.desc = desc;
    this.quantity = quantity;
}
public int getQuantity() {
    return quantity;
}

public String getDesc() {
    return desc;
}

public void setQuantity(int quantity) {
    this.quantity = quantity;
}

public void setDesc(String desc) {
    this.desc = desc;
}

@Override
public int compareTo(Fruit o) {
    return o.getDesc().compareTo(this.getDesc());
//here i …
Run Code Online (Sandbox Code Playgroud)

java comparable comparator

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

为什么我需要可比较的PriorityQueue?

我正在学习队列集合,我不明白为什么在使用PriorityQueue时我需要实现Comparable接口?我在数组/列表的自定义排序中使用了Comparable和Comparator接口.但是,当我不想对它进行排序时,为什么我需要为PriorityQueue实现...

在下面的示例中,我看到如果我没有实现Comparable接口,我就无法在PriorityQueue中添加元素.

对我来说很大的误解,在我运行此代码之后,列表没有按ID排序?我问这个问题是因为我看到compareTo()方法被覆盖了,当我想对列表进行排序时我使用这个方法.

我记得当我为列表完成自定义排序时,我已经使用了exaclty这个代码.列表按id排序.为什么在这种情况下队列没有排序?

抱歉我的英语语法.任何反馈将是apreciated!

import java.util.PriorityQueue;
import java.util.Queue;

    public class QueueExample {

        public static void main(String[] args) { 

            Queue<Book> queue = new PriorityQueue<>();

            //Creating Books  
            Book b1=new Book(121,"Let us C","Yashwant Kanetkar","BPB",8);  
            Book b2=new Book(233,"Operating System","Galvin","Wiley",6);  
            Book b3=new Book(101,"Data Communications & Networking","Forouzan","Mc Graw Hill",4); 
            Book b4=new Book(319,"Learn Java","Yanis Orhan","HEX",3);  
            Book b5=new Book(191,"Linux","Hadgy","Haman",7);  
            Book b6=new Book(287,"Python Programming","Tarzan","GEN",5); 

            //Adding Books to the queue  
            queue.add(b1);  
            queue.add(b2);  
            queue.add(b3);  
            queue.add(b4);  
            queue.add(b5);  
            queue.add(b6); 

            System.out.println("Traversing the queue elements:");  

            //Traversing queue elements  
            for(Book b : queue) {  

                System.out.println(b.id+" …
Run Code Online (Sandbox Code Playgroud)

java queue collections list comparable

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