如何从java中的链表中删除对象?

我的代码有一个问题,我做了一个示例程序来显示链接列表中的emp详细信息,现在问题当我试图删除一个特定条目意味着它不起作用,我希望我在我的代码中做了一些错误你能建议怎么做吗?

import java.util.*; class EmpDedup { int record; String fprint; int fid; EmpDedup(int record, String fprint, int fid) { this.record = record; this.fprint = fprint; this.fid = fid; } public int getRecord() { return record; } public String getFprint() { return fprint; } public int getFid() { return fid; } public static void main(String[] args) { int count = 0; LinkedList list = new LinkedList(); list.add(new EmpDedup(101, "entry1", 20)); list.add(new EmpDedup(102, "entry2", 30)); list.add(new EmpDedup(103, "entry3", 40)); list.add(new EmpDedup(104, "entry4", 50)); Scanner input = new Scanner(System.in); System.out.print("Enter record no to display: "); int rec = input.nextInt(); for (EmpDedup data : list) { if (data.getRecord() == rec) { System.out.println(data.getRecord() + "\t" + data.getFprint() + "\t" + data.getFid() + "\t"); count++; } } System.out.println("The size of an linkedlist is: \t" + list.size()); System.out.println("The number of available record is :" + count); System.out.println("The size of an linkedlist is: \t" + list.size()); Scanner input1 = new Scanner(System.in); System.out.print("Enter record no to delete: ");// here i try to delete a particular record int rec1 = input1.nextInt(); for (EmpDedup data : list) { if (data.getRecord() == rec1) { // System.out.println(data.getRecord()+"\t"+data.getFprint()+"\t"+data.getFid()+"\t"); list.remove(data); // problem is here count++; } } } } 

在迭代它们时,你不能在列表中操作(添加,删除……项目)。 你必须使用迭代器

 for(Iterator iter = list.iterator(); iter.hasNext();) { EmpDedup data = iter.next(); if (data.getRecord() == rec1) { iter.remove(); } } 

见http://docs.oracle.com/javase/6/docs/api/java/util/Iterator.html

请改用Iterator ,然后在Iterator上使用remove()方法

当你这样做:

list.remove(101);

你在调用这种方法,这不符合你的目的。

你应该使用:

list.remove(data);

您尝试删除索引为101的元素,但列表中只有4个项目。 它如何删除索引101的元素?

如果要删除等于EmpDedup(101,“entry1”,20)的元素,则必须删除此方法的remove方法。 并且不要忘记重新定义EmpDedup的equals和hash代码。

代码尝试删除索引位置101处的元素,但列表中只有四个项目。

使用以下代码替换您的代码:

 for( EmpDedup data : list) { if( data.getRecord() == rec1 ) { list.remove( data ); ++count; } } 

这就是删除列表对象的位置。

 for( EmpDedup data:list) { if(data.getRecord()==rec1) { list.remove(data); count++; } } 

import java.util.Scanner;

//一个完整的工作Java程序,用于演示单链//链表类中的删除LinkedList {Node head; //列表负责人

 /* Linked list Node*/ class Node { int data; Node next; Node(int d) { data = d; next = null; } } /* Given a key, deletes the first occurrence of key in linked list */ void deleteNode(int key) { // Store head node Node temp = head, prev = null; // If head node itself holds the key to be deleted if (temp != null && temp.data == key) { head = temp.next; // Changed head return; } // Search for the key to be deleted, keep track of the // previous node as we need to change temp.next while (temp != null && temp.data != key) { prev = temp; temp = temp.next; } // If key was not present in linked list if (temp == null) return; // Unlink the node from linked list prev.next = temp.next; } /* Inserts a new Node at front of the list. */ public void push(int new_data) { Node new_node = new Node(new_data); new_node.next = head; head = new_node; } /* This function prints contents of linked list starting from the given node */ public void printList() { Node tnode = head; while (tnode != null) { System.out.print(tnode.data+" "); tnode = tnode.next; } } /* Drier program to test above functions. Ideally this function should be in a separate user class. It is kept here to keep code compact */ public static void main(String[] args) { LinkedList llist = new LinkedList(); llist.push(7); llist.push(1); llist.push(3); llist.push(2); System.out.println("\nCreated Linked list is:"); llist.printList(); Scanner sc = new Scanner(System.in); System.out.println("please enter input"); int aa =sc.nextInt(); llist.deleteNode(aa); // Delete node at position 4 System.out.println("\nLinked List after Deletion at position :"+aa); llist.printList(); System.out.println("adding element to the LinkedList"); System.out.println("enter element"); int dd = sc.nextInt(); llist.push(dd); llist.printList(); } 

}