我正在浏览这篇文章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;
这是一个 Employee 对象的 ArrayList。我可以在此员工对象中添加多少个项目?我可以做这样的事情吗?
col.add(new Employee(5, "Frank", 28, "asas", "asas"));
这基本上是一个对象数组,例如
Array[0]
包含所有这些。我实际上正在尝试通过 ArrayList 访问这些对象数组。为什么
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()); } }
比较时,
this
和o
代表什么?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/