当前位置: 首页 > 知识库问答 >
问题:

使用remove()或remove()从ArrayList中删除项

汪博艺
2023-03-14

有人向我推荐了两种实现这一目标的方法:

这个'search'方法应该返回ArrayList中的位置(以便可以使用remove( ) )或对象引用(以便可以使用remove( ) )。如果找不到工作人员,则搜索方法应返回-1(如果使用remove( ) )或null(如果使用remove( ) )。

然而,我不确定如何在Java中实现这一点。

import java.util.*;

import personnelPackage.Personnel;

public class ArrayListTest
{
    static Scanner keyboard = new Scanner(System.in);

    public static void main(String[] args)
    {
        long searchQuery;

        ArrayList<Personnel> staffList = new ArrayList<Personnel>();
        Personnel[] staff =
            {new Personnel(123456,"Smith","John"),
             new Personnel(234567,"Jones","Sally Ann"),
             new Personnel(999999,"Black","James Paul")};

        for (Personnel person:staff)
            staffList.add(person);

        do
        {
            showDisplay(staffList);

            System.out.print("\nPlease enter a payroll number to search: ");
            searchQuery = keyboard.nextLong();

            searchForPayrollNumber(staffList, searchQuery);


        }while(!(searchQuery == 0));


    }

    private static void showDisplay(ArrayList<Personnel> staffList)
    {
        System.out.print("\n------------- CURRENT STAFF LIST -------------\n");
        for (Personnel person : staffList)
        {
            System.out.println("Payroll number: " + person.getPayNum());
            System.out.println("Surname: " + person.getSurname());
            System.out.println("First name(s): " + person.getFirstNames() + "\n");
        }
    }

    public static void searchForPayrollNumber(ArrayList<Personnel> staffList, long searchQuery)
    {
        long index = staffList.indexOf(searchQuery);;

        for (Personnel person: staffList)
        {
            if (person.getPayNum() == searchQuery)
            {               
                System.out.print("\n------------- Staff member found and removed! -------------");
                System.out.println("\n\nFirst Name(s): " + person.getFirstNames());
                System.out.println("\nSurname: " + person.getSurname());
                System.out.print("\n-----------------------------------------------");

                staffList.remove(index);
                return;
            }
        }

        System.out.print("\n------------- No staff members found. Program terminated -------------");
        return;

    }

}
package personnelPackage;

public class Personnel
{
    private long payrollNum;
    private String surname;
    private String firstNames;

    public Personnel(long payrollNum, String surname, String firstNames)
    {
        this.payrollNum = payrollNum;
        this.surname = surname;
        this.firstNames = firstNames;
    }

    public long getPayNum()
    {
        return payrollNum;
    }

    public String getSurname()
    {
        return surname;
    }

    public String getFirstNames()
    {
        return firstNames;
    }

    public void setSurname(String newName)
    {
        surname = newName;
    }
}

共有1个答案

仉宪
2023-03-14

考虑使用迭代进行搜索和删除:

Iterator<Personnel> i = staffList.iterator();
while (i.hasNext()) {
    Personnel p = i.next();
    if (p.getPayNum() == searchQuery) {
        // print message
        i.remove();
        return p;
    } 
}
return null;

如果严格要求使用list#remove(),则返回found人员p,并调用,如果(p!=null)stafflist.remove(p):

public static Personnel searchByPayNum(List<Personnel> ps, long num) {
    for (Personnel p : ps) {
        if (p.getPayNum() == num)
            return p;
    }
    return null;
}

在调用方代码中:

Personnel p = searchByPayNum(staffList, query);
if (p != null) {
    // log
    staffList.remove(p);
}
 类似资料:
  • 本章将讨论removeClass()方法,它是用于管理jQueryUI视觉效果的方法之一。 removeClass()方法从元素中删除应用的类。 removeClass()方法在为所有样式更改设置动画时将指定的类移除到匹配的元素。 语法 (Syntax) 在jQueryUI的1.0版中添加 removeClass()方法的基本语法如下 - .removeClass( className [, du

  • 本文向大家介绍jQuery中DOM节点删除之empty与remove,包括了jQuery中DOM节点删除之empty与remove的使用技巧和注意事项,需要的朋友参考一下 前言 最近刚学了新知识,虽然是一个小知识点,但还是忍不住想和大家分享。本文的内容主要针对的是初学者,如果大家有什么意见或者问题都可以留言交流的,下面来看看详细的介绍吧。 .empty()是指对该节点后代的删除,结果是清空该节点(

  • .remove( value:* ) : * 从时间轴上移除一个动画、时间轴、函数或标签(或者他们的数组)。 tm.remove(tween1); .remove()适用于TimelineMaxTimelineLite .remove()的参数 参数 类型 必填 说明 value * 是 要删除的动画、时间轴、函数或标签(或者他们的数组) .remove() 示例 .remove()返回值 返回

  • ui:remove标签用于防止在客户端呈现JSF特定代码。 它特别用于防止注释掉的代码在客户端呈现。 使用HTML注释将JSF标记注释掉 <!-- JSF code commented out --> <!-- <h:commandButton value = "Ok" /> --> 渲染输出 (Rendered Output) <!-- JSF code commented out --

  • remove(删除文件) 相关函数 link,rename,unlink 表头文件 #include<stdio.h> 定义函数 int remove(const char * pathname); 函数说明 remove()会删除参数pathname指定的文件。如果参数pathname为一文件,则调用unlink()处理,若参数pathname为一目录,则调用rmdir()来处理。请参考unli

  • 描述 (Description) 它用于从DOM中删除视图,并调用stopListening以删除视图已listenTo'd任何绑定事件。 语法 (Syntax) view.remove() 例子 (Example) <!DOCTYPE html> <html> <head> <title>View Example</title> <script src = "ht