java中两个列表的区别

时间:2017-04-03 07:27:14

标签: java list data-structures

我开始用java学习数据结构和算法。

我从列表开始,我学习的第一个概念是数组和列表之间的区别。

现在在列表中我学习如何插入和元素列表和显示在屏幕上。我得到了两段代码,第一段我很了解;第二个令人困惑的地方。

我的困惑是Node在这里是什么?一开始我们取消df.plot() 所以基本上这就是Node。

是预定义的数据类型还是某种东西。任何人都可以解释第二个程序是如何流动的。虽然我是编程新手所以想知道第二个程序与第一个程序有什么不同。和有什么区别。

我也明白我们在这里使用util但仍然想知道因为人们如何在工业中使用。

第一种方法:

Node head;

第二种方法:

import java.util.*;  
public class TestCollection7{  
 public static void main(String args[]){  

  LinkedList<String> al=new LinkedList<String>();  
  al.add("Ravi");  
  al.add("Vijay");  
  al.add("Ravi");  
  al.add("Ajay");  

  Iterator<String> itr=al.iterator();  
  while(itr.hasNext()){  
   System.out.println(itr.next());  
  }  
 }  
} 

4 个答案:

答案 0 :(得分:3)

Node是嵌套在LIstTEst内的类。

你有它的定义:

static class Node {
    int data;
    Node next;
    Node(int d) {
        data = d;
        next = null;
    }
}

它表示链接列表中的链接。它包含一个数值(data)和对列表中下一个Node的引用。

Node head;

LIstTEst的成员,它引用列表中的第一个链接。

请注意,缺少LIstTEst的已发布实施。它应该使用add方法而不是main创建Node并直接操作链接。

答案 1 :(得分:2)

public class LIstTEst 

只是第一个迈向自我实施列表的步骤。而您的第一个源代码使用链接列表实现作为&#34;标准的一部分&#34; Java集合类。

A&#34;链接列表&#34; (通用术语)只不过是一个连接东西(相同类型)的列表。那些&#34; thingies&#34;用内部Node类表示。

因此,真正的答案是:避免混淆概念和实现。为了理解Java如何处理链接列表&#34 ;;你应该先退后一步,了解概念&#34;链表&#34;本身。例如,通过阅读其wikipedia条目:

  

在计算机科学中,链表是数据元素的线性集合,称为节点,每个数据元素通过指针指向下一个节点。它是由一组节点组成的数据结构,这些节点一起表示序列。在最简单的形式下,每个节点由数据和到序列中下一个节点的引用(换句话说,链接)组成。该结构允许在迭代期间从序列中的任何位置有效地插入或移除元素。更复杂的变体添加了额外的链接,允许有效插入或从任意元素引用中删除。

换句话说:编程语言是关于实现给定语言的通用算法和数据结构。因此,我们建议您通过了解这些常见概念来开始您的研究。

除此之外:你可能会发现第二个例子令人困惑的原因:

  • 可能你还没有了解inner classes
  • 这个例子不完整;添加或删除列表元素的重要方法仍然缺失!

答案 2 :(得分:0)

第一个例子

LinkedList是java中链表数据结构的一种实现。

第二个例子

它是手动编写的相同数据结构的实现。 Node是您的类,它描述了此链表中的一个单元格。

两种实现都不一样。 Java的实现提供了许多方便的方法来处理列表,而不是。您可以从实现add方法开始。

// appends the specified element to the end of this list.
public void add(int data) {

    // create Node only in case of first element
    if (head == null) {
        head = new Node(data);
    }

    Node temp = new Node(data);
    Node current = head;

    // check if there is first element
    if (current != null) {

        // starting at the head node, iterate to the end of the list and then add element after last node
        while (current.getNext() != null) {
            current = current.getNext();
        }

        // the last node's "next" reference set to our new node
        current.setNext(temp);
    }
}

什么是链表?

长话短说:链表是一系列细胞。每个小区都知道下一个小区。最后一个小区知道没有下一个小区。链接列表类(操纵那些单元(节点))包含第一个节点的引用。

enter image description here

请看这个互动演示:https://visualgo.net/list

答案 3 :(得分:0)

public class LIstTEst {     节点头; // ==&gt;声明一个类级变量。

static class Node { // create a static class
    int data; // integer data type variable.
    Node next; // Class refrernce.

    Node(int d) { // create a constructor.
        data = d; // holding the current value.
        next = null;
    }
}

public void PrintList() {
    Node n = head;
    while (n != null) {
        System.out.print(n.data + " ");
        n = n.next;
    }
}

public static void main(String args[]) {
    LIstTEst llist = new LIstTEst(); // creating a object of the mentioned
                                        // class.
    llist.head = new Node(1); // creating the Node class object by Class
                                // level refrence.
    Node second = new Node(2); // As this is static class, inside one class,
                                // so we created directly to object of Node
                                // class by passing the parameter to the
                                // constructor.
    Node third = new Node(7);

    llist.head.next = second; // just transfering the current reference to
                                // next level reference before that
                                // constructor is making null for each
                                // executions.
    llist.head.next = third;

    llist.PrintList(); // Finally for printing purpose it is calling.
}

}