【问题标题】:How to store/generate an integer ID for every node or data in linkedList?如何为linkedList中的每个节点或数据存储/生成整数ID?
【发布时间】:2019-12-23 20:21:09
【问题描述】:

我正在处理一个问题,并决定使用linkedList 来简化它。我首先、最后和在位置创建了插入。 现在让我们首先关注插入,这就是我想要实现的,每当我将一个值插入到列表中时,我还想同时存储一个唯一的 ID。 这样当我想搜索时一个特定的项目,我将简单地使用 ID 并得到我正在寻找的想要。我在这里使用 JAVA 语言,并创建了 Node 类以供参考,并创建了包含我的功能的 LinkedList 类。请注意,ID 应该是一个 int 值,例如,如果我们将第一个项目插入列表,它的 ID 应该是“1”等等。 这是我的节点类:

public class Node {

    private int data;
    private int id;
    private Node next;

    public Node(int data, Node next, int id) {
        this.data = data;
        this.next = next;
        this.id = id;
    }

    public Node() {}

    public int getData() {
        return data;
    }

    public void setData(int data) {
        this.data = data;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

这是我的 insertAtFirst(int data) 方法:

public void insertAtFirst(int data) {

        Node newNode = new Node();
        newNode.setData(data);
        ID++;
        newNode.setId(ID);

        newNode.setNext(head);
        head = newNode;
        size++;
    }

【问题讨论】:

    标签: java algorithm singly-linked-list


    【解决方案1】:

    您可以创建私有静态值,该值会在创建实例时自动分配给每个实例。这是因为 ID 的静态来源对于所有 SomeNode 类都是相同的。

          String letters = "ABCDEFGHIJK";
          List<SomeNode> list = new LinkedList<>();
          for (int i = 0; i < 10; i++) {
             list.add(new SomeNode(letters.substring(i,i+1)));
          }
          list.forEach(node->System.out.println(node.getInfo() + " " + node.getID()));
    
    
          class SomeNode {
             private static int ID = 1;
             private int id;
             String info;
             public SomeNode(String info) {
              this.info = info;
              this.id = ID++;
             }
             public int getID() {
              return id;
             }
             public String getInfo() {
              return info;
             }
          }
    
    

    请注意,如果您使用线程,这可能会出现问题,因为重复的 ID 可能会分配给两个不同的实例。所以你可能想看看Atomic 类(例如AtomicInteger)以及synchronization

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 2015-02-23
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多