为什么从容器类而不是Java实例中调用方法

时间:2019-03-30 09:35:02

标签: java class methods collections call

我正在尝试学习Java集合。但是对于调用集合方法,我不了解一种特殊的语法。像(ngSubmit)<form> e。 G。 ;

我不明白为什么我们从Arrays类或Collections类调用以下方法的原因。对于打印数组,这在df.iloc[:, 0:8].replace('???', np.nan, inplace=True) 内部被调用。

.toString()

用于列表排序

.sort()

为什么不呢?

println()

有人可以引导我通过它吗?

5 个答案:

答案 0 :(得分:3)

您的两个示例的原因不同:

在数组类型中没有toString的自定义实现。对于MyType[].toString(),开发人员不会为数组类型“覆盖” toString()。这就是为什么提供了辅助程序Arrays.toString的原因。数组类型的toString实现是从Object继承的,几乎总是没有很大帮助。

List.sort是Java {8}中引入的default中的List方法。在此之前,只能使用Collections.sort进行排序。如果您查看Collections.sort的来源,它将排序本身委托给List.sort。至于为什么从一开始就不在List中,这只能由API设计人员来回答。我能想到的一个原因是一致性(Collections有许多静态集合方法,而Java直到版本8才在接口中支持静态方法)。

答案 1 :(得分:1)

docs的第一行开始:

  

Collections框架是用于表示和操作集合的统一体系结构,使它们可以独立于表示的细节进行操作。它减少了编程工作,同时提高了性能。它实现了不相关的API之间的互操作性,减少了设计和学习新API的工作量,并促进了软件重用。该框架基于十几个收集接口。它包括这些接口的实现和用于操纵它们的算法。

目标是减少代码重复。在const setHomeTeam = (state, homeTeam) => { const availableTeams = allTeams .filter(team => team.value !== homeTeam && team.value !== state.awayTeam) return Object.assign( {}, state, {homeTeam}, {availableTeams} ) } 的情况下,myList.sort()接口的所有实现都必须实现List函数,并且每种实现的种类可能会有所不同。但是,作为sort类上的静态方法,Collections实现不需要实现sort函数。从用户的角度来看,您可以将List传递给List,然后知道会发生什么。

自Java 8起,该功能可以使用默认方法来实现,List.sort(comparator)就是这样做的。默认方法允许接口的所有实现接收该接口中定义的实现,因此从Java 8可以 进行Collections.sort(),但需要注意的是,您必须告诉它如何通过提供比较功能进行排序。例如,假设您有一个myList.sort()List<Integer>。但是Collections Framework早于默认方法,因此需要mylist.sort(Integer::compareTo)

除了Collections.sort()Collections.sort()外,您还可以使用List.sort(comparator)Stream.sorted()

答案 2 :(得分:0)

由于参数不匹配,因此无法直接在对象上调用这些静态方法。这些方法绑定到该类,而不是绑定到该类的特定实例,因此您必须将对象作为参数。而且,这些方法可以做不同的事情:

Arrays.toString(myArray);

是一种打印数组内容的便捷方法。如果调用myArray.toString(),则会打印对象的哈希码。

答案 3 :(得分:0)

最好使用

Arrays.toString(myArray);

代替

myArray.toString();

因为,如果myArray将为null,则myArray.toString()将抛出java.lang.NullPointerException,但Arrays.toString(myArray)将返回null。与myArray.sort()

相同

答案 4 :(得分:0)

Java对数组的toString()是打印[,后跟一个表示数组元素的 type 的字符,然后是@,然后是“数组的身份哈希码”(可以想像它是“内存地址”)。

要获得人类可以理解的有意义的东西,您需要Arrays.toString(myArray);

  

数组不会覆盖toString,有一个静态方法:   java.util.Arrays.toString进行营救。