我正在尝试学习Java集合。但是对于调用集合方法,我不了解一种特殊的语法。像(ngSubmit)
或<form>
e。 G。 ;
我不明白为什么我们从Arrays类或Collections类调用以下方法的原因。对于打印数组,这在df.iloc[:, 0:8].replace('???', np.nan, inplace=True)
内部被调用。
.toString()
用于列表排序
.sort()
为什么不呢?
println()
有人可以引导我通过它吗?
答案 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
进行营救。