java - ArrayList、static 和 this 在 Java 中如何工作?

标签 java static arraylist this comparable

我正在浏览这篇文章Java Sorting: Comparator vs Comparable Tutorial ,并对此有一些疑问。

List<Employee> col = new ArrayList<Employee>();

col.add(new Employee(5, "Frank", 28));
col.add(new Employee(1, "Jorge", 19));
col.add(new Employee(6, "Bill", 34));
col.add(new Employee(3, "Michel", 10));
col.add(new Employee(7, "Simpson", 8));
col.add(new Employee(4, "Clerk", 16));
col.add(new Employee(8, "Lee", 40));
col.add(new Employee(2, "Mark", 30));

return col;
  1. 这是一个 Employee 对象的 ArrayList。我可以在此员工对象中添加多少个项目?我可以做这样的事情吗?

    col.add(new Employee(5, "Frank", 28, "asas", "asas"));
    

    这基本上是一个对象数组,例如 Array[0] 包含所有这些。我实际上正在尝试通过 ArrayList 访问这些对象数组。

  2. 为什么 printList 是静态的?我这里还可以有其他类型吗?

     private static void printList(List<Employee> list) {
         System.out.println("EmpId\tName\tAge");
         for (Employee e: list) {
             System.out.println(e.getEmpId() + "\t" + e.getName() + "\t" + e.getAge());
         }
     }
    
  3. 比较时,thiso 代表什么?

    public int compareTo(Employee o) {
         return this.empId - o.empId;
    }
    

    这里的this是什么意思?

最佳答案

how many items can i add?

您可以将项目添加到列表中,直到 Java VM 内存耗尽。没有人为的限制。

can i do something like this?

col.add(new Employee(5, "Frank", 28, "asas", "asas"))

不,因为 Employee 没有接受这些参数的构造函数。但你可以

col.add(new Employee(5, "Frank", 28));

这会在列表中为您提供两个非常相似但不相同的实例(它们不相同,因为它们位于内存中的不同位置;它们相似,因为所有字段都具有相同的值)。

Why does the printList made static?

因此可以从静态方法 main() 调用它,而无需创建 TestEmployeeSort 实例

what does this represent and o represent?

排序算法将选择列表中的两项,并对其中一项调用 compareTo(),并将另一项作为参数。前者将是 this,后者将在 o 中。

这样,排序算法不需要了解太多关于它比较的对象的信息。

优点是可以轻松地使对象具有可比性。缺点是列表不能包含 null 指针或非 Employee 实例。

如果这对您不起作用,您可以创建一个 Comparator,它也有一个 compareTo 方法,但它需要两个参数。

关于java - ArrayList、static 和 this 在 Java 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6995857/

相关文章:

java - 删除对象时 ArrayList 中的索引越界异常

java - 什么时候使用工厂而不是简单地返回一个 bean 是一个糟糕的设计选择?

java - 将 stringWidth 与 html 字符串一起使用

java - 创建Factory来创建领域对象的正确方法

c - 视频4 Linux 2读取MMAP地址

c# - 在静态方法中管理一次性对象

java - Set 实现中的 addAll() 方法不起作用

java - 打开 Matlab/Simulink 文件并从 Java GUI 中选择模块

C: 只需在 for 循环内调用 getline 即可将变量变为 0

java - 将项目添加到 ArrayLists 大小错误的 LinkedList