Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与LinkedList实现混淆_Java_Arrays_Linked List - Fatal编程技术网

Java 与LinkedList实现混淆

Java 与LinkedList实现混淆,java,arrays,linked-list,Java,Arrays,Linked List,所以我的家庭作业的一部分是得到一个整数值串,然后把每一个都放在一个列表中,这就是我所做的: public static void main(String[] args) { Scanner input = new Scanner(System.in); String N; int count; LinkedList<Integer> booksList = new LinkedList<>(); System.

所以我的家庭作业的一部分是得到一个整数值串,然后把每一个都放在一个列表中,这就是我所做的:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    String N;
    int count;        
    LinkedList<Integer> booksList = new LinkedList<>();


    System.out.printf("Give: ");
    N = input.nextLine();

    String[] arr = N.split(" ");        

    for (count = 0; count < arr.length - 2; count++) {            
        booksList.add(Integer.parseInt(arr[count + 2]));
    }
这让我很困惑,我不完全确定我是否用正确的方式做了这件事。 顺便说一下,我从count+2获取数组元素,因为我不需要答案的前两个元素,但我需要将前两个整数存储在两个单独的变量中

我还看到一些人这样写:

List<Integer> booksList = new LinkedList<>();
List booksList=newlinkedlist();

这与我写的有什么不同吗?

函数
整数。parseInt
返回一个
新整数
,因此您不需要使用新的关键字

继续试验并使用诸如Eclipse之类的IDE,它将突出显示编译错误,您很快就会学会这种语言。如果你仍在挣扎,请阅读在线教程或咨询你的教授。

你的代码很好

以下是:

booksList.add(new Integer.parseInt(arr[count + 2]));
语法上是不正确的,而你所拥有的是

<> > <代码>列表BooSList=…< /COD> VS <代码> LIKEDLIST BooStList=…,我认为前者稍微好一些。然而,有时有必要使用后者。这种差异在很大程度上是风格上的,我现在不会太担心

最后,我想回应其他人在评论中所说的:在变量首次使用时声明变量,而不是之前声明。另外,不要重用变量。

构造

List<Integer> booksList = new LinkedList<>();
List booksList=newlinkedlist();
常见的原因主要有两个:

  • a) 您不确定适合您的最佳收藏是什么。有很多候选者:数组、集合、列表、向量、映射等等,但是你必须使用一些特定的东西。因此,在右手边,它必须是具体的,但在左手边,你尽量敞开
通常,您只需在集合上进行迭代,使用for循环、搜索、排序、放入、获取、删除

如果您发现您的第一个想法的一个兄弟更适合,您可以稍后更改RHS,而无需重写程序的其余部分,因为,例如,LinkedList和ArrayList的大多数方法都完全符合列表中定义的相同约定

  • b) 如果你使用更宽的物体,你会与外界更加兼容。当然,您不能使用像Object这样模糊的东西,因为Object没有.add(E)方法
但对于排序、搜索等,列表是非常适合的。查看文档,并比较List、LinkedList和ArrayList。尝试在代码中用另一个替换一个

可能在基类中定义了Linked~和ArrayList中的两个“sublist(int-fromfindex,int-toIndex)”方法,它们的行为相同


但可能它们是专门化的,并且自己实现子列表。在Java中,我们有一个接口a
List
,它是一个接口,在特定的实现中从中定义方法。例如,
LinkedList
实现列表接口,并创建自己版本的添加、删除和其他方法。这非常重要,因为其他数据结构,如
ArrayList
也实现了列表接口。添加、删除和其他方法在
LinkedList
ArrayList
中的操作非常不同

当你写作时

List<Integer> booksList = new LinkedList<>()
List booksList=newlinkedlist()
它的操作与

LinkedList<Integer> booksList = new LinkedList<>()
LinkedList booksList=newlinkedlist()
因为
new
关键字创建了一个
LinkedList
对象,该对象绑定到名称
booksList
booksList
恰好是第一个示例中的List对象,从中
LinkedList
实现

检查文档,看看哪些数据结构实现了列表界面。您会惊讶地发现,
List newList=new….
有多少种方式是有效的代码

有一点没有提到,在声明数据结构时,最好在所有尖括号中传递泛型类型


ie
List booksList=new LinkedList()

在使用变量之前,不要预先声明变量。保持其范围小。N在4行之后使用,并且可以在那里引入(
N=…
),count在循环之外不使用。我只是认为预先声明它们是一个好规则,这会让事情变得更好吗?至于count,我以后在主程序中再次使用它。我的意思是,我预先声明它们,然后在它们旁边写一条注释,这样我就知道它们在哪里使用了。我想我现在知道了,所以如果我在使用Arraylist时理解正确,LinkedList等我会有一个我使用的具体方法,但如果我使用列表,我会把所有的方法放在一起,或者沿着这些方法lines@SilliconTouch,不一定。检查我的答案,我对此有点了解。您调用的方法在您声明的数据结构中执行,但实际操作有所不同。仅仅因为在许多结构中定义了
get()
,并不意味着它的操作是相同的。
ArrayList
LinkedList
方法的操作方式不同,但结果总是一样的,这就是
接口的主要思想。它们是可互换的,唯一的区别是每个实现都有其在性能(或内存使用)方面出色的用例。此外,我认为将泛型类型传递给所有括号不是一个好主意。这个
菱形操作符是Java7的新操作符,非常有用。“看不见,”斯莱内克,我就是这个意思。做同一件事并返回相同结果的不同方法。另外,我来自Java6的背景,那里不存在钻石操作符,也没有太多时间玩7。
Scanner input = new Scanner (System.in);
LinkedList<Integer> booksList = new LinkedList<>();
System.out.printf ("Give: ");
String N = input.nextLine ();
String[] arr = answer.split (" ");        

for (String num: arr) {            
    booksList.add (Integer.parseInt (num));
}
bookList.remove ();
bookList.remove ();
Scanner input = new Scanner (System.in);
LinkedList<Integer> booksList = new LinkedList<>();
System.out.printf ("Give: ");       

while (input.hasNextInt ()) {            
    booksList.add (input.nextInt ());
}
bookList.remove ();
bookList.remove ();
    String line = input.nextLine (); 
    Scanner valueLine = new Scanner (line);
    List<Integer> books = new LinkedList<>();

    while (valueLine.hasNextInt ()) {            
        books.add (valueLine.nextInt ());
    }
List<Integer> booksList = new LinkedList<>()
LinkedList<Integer> booksList = new LinkedList<>()