Java 如何创建一个类的多个实例?

Java 如何创建一个类的多个实例?,java,arraylist,sortedlist,Java,Arraylist,Sortedlist,我有一个类借用器,它由一个名字组成,然后它还存储一个arraylist,其中包含该人借用的项目 我希望能够从我的main创建这个类的多个实例,然后能够访问它们以查看它们借用的项目 我很难理解如何创建多个实例。我只是不断遇到覆盖借用类的问题 因此,在下面的代码中,如果我创建newBorrower(“Tim”),然后添加项(“扳手”),然后转到创建newBorrower(“john”),那么我将覆盖newBorrower 我希望能够基于用户输入创建多个借用者实例 我试着拯救整个借款者阶层。我不确定这

我有一个类借用器,它由一个名字组成,然后它还存储一个arraylist,其中包含该人借用的项目

我希望能够从我的main创建这个类的多个实例,然后能够访问它们以查看它们借用的项目

我很难理解如何创建多个实例。我只是不断遇到覆盖借用类的问题

因此,在下面的代码中,如果我创建newBorrower(“Tim”),然后添加项(“扳手”),然后转到创建newBorrower(“john”),那么我将覆盖newBorrower

我希望能够基于用户输入创建多个借用者实例

我试着拯救整个借款者阶层。我不确定这是否有效,因为它不会排序,所以我不能添加多个名称,否则会出错

借款人类别

public class Borrower 
{

    protected String name;
    protected String item;

    ArrayList<String> itemList = new ArrayList<String>();

    public Borrower()
    { 
    }

    public Borrower(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return name;
    }

    public void addItem(String item)
    {
        this.item = item;
        itemList.add(item);
    }
公共类借款人
{
受保护的字符串名称;
受保护的字符串项;
ArrayList itemList=新建ArrayList();
公共借款人()
{ 
}
公共借款人(字符串名称)
{
this.name=名称;
}
公共字符串getName()
{
返回名称;
}
公共无效附加项(字符串项)
{
this.item=项目;
项目列表。添加(项目);
}
主类

public class WhoBorrowedIt 
{

    public static void main(String[] args) 
    {
        ArraySortedList<String> borrowersList = new ArraySortedList<String>();
        Borrower newBorrower = new Borrower();
        Borrower otherBorrower = new Borrower();

        Scanner inName = new Scanner(System.in);
        Scanner inItem = new Scanner(System.in);

        String item;
        String name;

        String menu;
        int option;

        menu = "Make a selection: " + "\n" 
                + "1. Add Borrower" + "\n"
                + "2. Add Item Borrowed" + "\n"
                + "3. Remove Item Returned" + "\n"
                + "4. View Borrowers" + "\n"
                + "5. Exit";

        do
        {
            Scanner in = new Scanner(System.in);
            System.out.println(menu);
            option = in.nextInt();

            switch(option)
            {
                case 1: //create borrower
                {
                    System.out.println("Enter Name");
                    name = inName.nextLine();
                    newBorrower = new Borrower(name);
                    borrowersList.add(newBorrower.getName());
                    break;
                }

                case 2: //add items
                {
                    System.out.println("Enter item");
                    item = inItem.nextLine();
                    System.out.println("Who is borrowing");
                    name = inName.nextLine();
                    if(borrowersList.contains(name))
                    {
                        newBorrower.addItem(item);
                    }
                    else
                    {
                        newBorrower = new Borrower(name);
                        borrowersList.add(newBorrower.getName());
                        newBorrower.addItem(item);
                    }
                }
        }while(option != 5)
}
}
public类编辑
{
公共静态void main(字符串[]args)
{
ArraySortedList借款者列表=新建ArraySortedList();
借款人新借款人=新借款人();
借款人其他借款人=新借款人();
Scanner inName=新扫描仪(System.in);
Scanner inItem=新扫描仪(System.in);
字符串项;
字符串名;
字符串菜单;
int选项;
menu=“进行选择:”+“\n”
+“1.添加借用者”+“\n”
+“2.添加借用的项目”+“\n”
+“3.删除返回的项目”+“\n”
+“4.查看借款人”+“\n”
+“5.退出”;
做
{
扫描仪输入=新扫描仪(系统输入);
系统输出打印项次(菜单);
option=in.nextInt();
开关(选件)
{
案例1://创建借款人
{
System.out.println(“输入名称”);
name=inName.nextLine();
newBorrower=新借款人(名称);
添加(newBorrower.getName());
打破
}
案例2://添加项目
{
系统输出打印项次(“输入项”);
item=inItem.nextLine();
System.out.println(“谁在借款”);
name=inName.nextLine();
if(借用者列表包含(名称))
{
newBorrower.addItem(项目);
}
其他的
{
newBorrower=新借款人(名称);
添加(newBorrower.getName());
newBorrower.addItem(项目);
}
}
}while(选项!=5)
}
}

像这样使用
地图

if (borrowersMap.containsKey(name))
{
    borrowersMap.get(name).addItem(item)
}
else
{
    newBorrower = new Borrower(name);
    borrowersMap.put(newBorrower.getName(), newBorrower);
    newBorrower.addItem(item);
}
其中,
borrowersMap
是一个HashMap

Map<String, Borrower> borrowersMap = new HashMap<String, Borrower>();
Map-borrowersMap=newhashmap();

您可以将列表更改为

List<Borrower> borrowerList = new ArraySortedList<Borrower>();

然后,当您创建一个新的借贷者时,您将其添加到列表中-当您获得一个现有的借贷者时,您使用该方法并在向其添加项目之前检查
null

是时候找出数组是什么了。您可以保留
借贷者对象的
列表,而不是保留借贷者名称的
列表。因此,当你问谁在借东西时,你首先得到借书人对象(从列表中)并将项目添加到其
项目列表中
-这有帮助吗?实际上,借款人地图可能更合适。然后可以按名称将每个借款人插入地图。@热单击可能按名称将
地图添加到地图中。您已经拥有创建多个借款人的机制。它在您的借款人类中。检查您如何处理借用多个项目的借款人。执行与借用人类似的操作。基本上,从借用人类中借用来存储借用人。一个
TreeMap
会自动按键排序。这类似于
Map
,但速度较慢,用户友好性较差。公平地说,我只是试图保持现有结构不变OP正在使用(很明显,他对Java世界还不熟悉)。引入更好的结构/对象来完成任务,这在Java中是显而易见的,但对于新手来说,可能会使事情变得更复杂,这是不必要的。哦,我不同意用户友好程度降低,但我想这是一个意见问题。
private Borrower getBorrowerByName( String borrowerName ){
    for( Borrower borrower : borrowerList ){
        if( borrower.getName().equalsIgnoreCase( borrowerName ) ){
            return borrower;
        }
    }
    return null;
}