Java 列表<;E>;启动位置

Java 列表<;E>;启动位置,java,list,Java,List,我正在为我的数据结构类创建一个简单的纸牌战争游戏 我目前的方法如下: Play Turn(List<Card> player1, List<Card> player2){ return null; } 播放回合(列表播放者1、列表播放者2){ 返回null; } 上述方法(据我所知,目前尚不完整)假设接受列表接口的任何子接口(即堆栈、ArrayList、LinkedList等) 堆栈使用pop()返回/删除堆栈的顶部,类似于ArrayList或LinkedLi

我正在为我的数据结构类创建一个简单的纸牌战争游戏

我目前的方法如下:

Play Turn(List<Card> player1, List<Card> player2){
    return null;
}
播放回合(列表播放者1、列表播放者2){
返回null;
}
上述方法(据我所知,目前尚不完整)假设接受列表接口的任何子接口(即堆栈、ArrayList、LinkedList等)

堆栈使用pop()返回/删除堆栈的顶部,类似于ArrayList或LinkedList,我可以使用get()方法返回第一个元素,然后使用remove()方法删除该元素


那么,有没有一种方法可以以通用的方式来实现这一点,或者我必须创建一个适合我允许使用的列表的每个版本的方法?

请学习并遵循Java编码标准(或)。没有它们,您的代码就不容易理解

您的方法应如下所示:

Play turn(List<Card> player1, List<Card> player2) {
    return null;
}
播放回合(列表播放者1、列表播放者2){
返回null;
}
含义很清楚:您可以在实现
列表
接口的堆上传递对
对象的任何引用。这意味着您的实现应该只调用
列表
接口中的方法。您不应该关心所给参考的具体实现

我不明白
Stack
在这个界面中的位置。
堆栈
可以使用
列表
实现,但其方法(推送、弹出、窥视)不是
列表
界面的一部分。它们将禁止您界面中的参数使用


如果你认为你的方法需要每个玩家都有一个
堆栈,那么你不应该把
列表
作为参数。

任何实现
列表
接口的类都会对调用
列表
方法时会发生什么做出一系列承诺。他们可能以不同的方式履行承诺,但承诺将在所有实现中实现


例如,对
List
的任何实现调用
get(0)
将返回列表中的第一项。无论您使用的是
数组列表
链接列表
堆栈
、还是
作业自定义列表
,都是如此。因此,没有必要为不同类型的列表定制您的方法。

相反:除非您有很好的理由,否则您绝对希望避免任何类型的负面影响。!因此,任何类型的检查实例和列表接口的具体实现都是您不希望在代码中包含的

含义:这些接口的一个主要优点是它们已经包含了您需要调用的方法


换句话说:这种接口的关键价值之一是,接口本身就提供了完成工作所需的方法。它们提供了一个强大的抽象,允许您的代码完全不知道“该接口实际上是如何实现的!”

堆栈
数组列表
,…,所有这些都实现了
列表
接口的方法(如
获取
删除
,…),所以你可以用这些做任何事。。。如果不需要,为什么要使用特定的
堆栈
方法(如
pop
)?如果将实现限制为列出方法,则不需要单独的实现。如果你认为你需要知道潜在的类型,再想想。这回答了我的问题。我的印象是,尽管我在“列表”界面下使用了“堆栈”,但与使用“get”和“remove”等方法相比,我必须使用“pop”等方法。接受接口的全部意义在于,您不必担心实际实现。使用
列表
方法,就是这样。在
{
之间是否应该有一个空格?(我不完全确定Java编码标准是什么,因为我主要是一个C语言人,但我看到的示例遵循第一种格式……)我指的是方法名称——它应该是turn,而不是turn。我会在两者之间留一个空格。你把大括号放在正确的位置:在方法声明的末尾,而不是下一行。我仍然在学习所有的标准,因为我只是一名二年级学生,所以我为我所犯的错误道歉。@BalinKingOfMoria是的那里应该有个空间。