Java 更新记录时如何使用替换方法?

Java 更新记录时如何使用替换方法?,java,collections,hashmap,Java,Collections,Hashmap,我正在使用HashMap创建一个联系人簿实现,但是在更新记录时,我不知道如何使用replace(K,V)方法,所以我临时使用setter方法。我想让用户选择他们想要更新的名称/电子邮件/手机。If Name然后将用新名称替换现有名称,也将用于电子邮件和手机 ```import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.ut

我正在使用HashMap创建一个联系人簿实现,但是在更新记录时,我不知道如何使用replace(K,V)方法,所以我临时使用setter方法。我想让用户选择他们想要更新的名称/电子邮件/手机。If Name然后将用新名称替换现有名称,也将用于电子邮件和手机

```import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Scanner;
 class Contact {
    private String name, email;
    private int mobile;
    public Contact() {
       name = null;
       email = null;
       mobile = 0;
    }
    public Contact(String name, String email, int mobile) {
       super();
       this.name = name;
       this.email = email;
       this.mobile = mobile;
    }
    public String getName() {
       return name;
    }
    public void setName(String name) {
       this.name = name;
    }
    public String getEmail() {
       return email;
    }
    public void setEmail(String email) {
       this.email = email;
    }
    public int getMobile() {
       return mobile;
    }
    public void setMobile(int mobile) {
      this.mobile = mobile;
    }
    @Override
    public String toString() {
       return "Contact [name=" + name + ", email=" + email + ", mobile=" + mobile + "]";
    }
   }
  interface ContactBook {
    void add(Contact contact);
    void update(String name, Contact contact);
    void remove(String name);
    void find(String name);
    void listAll();
    }

   class ContactBookImpl implements ContactBook {

       Contact contact = new Contact();
       Scanner sc = new Scanner(System.in);
       private HashMap<String, Contact> contactBook;

       public ContactBookImpl() {
       contactBook = new HashMap<String, Contact>();
     }

     @Override
     public void add(Contact contact) {
          contactBook.put(contact.getName(), contact);
     }

    @Override
    public void find(String name) {
    if (contactBook.containsKey(name)) {
        System.out.println("Record Found....");
        System.out.println(contactBook.get(name));

    } else {
        System.out.println("Record NOT Found");
    }
    }

   @Override
   public void listAll() {

    Iterator entryitr = contactBook.entrySet().iterator();
    while (entryitr.hasNext()) {
        Map.Entry entry = (Map.Entry) entryitr.next();
        //System.out.print(entry.getKey() + ":");
        System.out.println(entry.getValue());
    }
    } 

  @Override 
      public void remove(String name) {
        if (contactBook.containsKey(name)) {
        contactBook.remove(name,contactBook.get(name));
        System.out.println("Removed Data....");
    }

   }

   @Override
    public void update(String name, Contact contact) {
     if(contactBook.containsKey(name))
    {
        System.out.println("What You want to Update (Name/Email/Mobile) ?");
        if(sc.next().equals("Name"))
        {   

            System.out.println(name + " should be replaced by : ");
            String name2 = sc.next();
            contact.setName(name2);
            //contactBook.replace(name,contact.setName(name2));

        }
        if(sc.next().equals("Email"))
        {   
            System.out.println(name + " should be replaced by : ");
            String email2 = sc.next();
            contact.setEmail(email2);
        }
        if(sc.next().equals("Mobile"))
        {   
            System.out.println(name + " should be replaced by : ");
            int no2 = sc.nextInt();
            contact.setMobile(no2);

        }
        }
        }
       }

        public class ContactBook_HashMap {

          public static void main(String[] args) {

            ContactBookImpl obj = new ContactBookImpl();
           Contact c1 = new Contact("a","E",91);
            Contact c2 = new Contact("b","M",92);
         Contact c3 = new Contact("c","A",93);
         obj.add(c1);
         obj.add(c2);
         obj.add(c3);
         obj.listAll();
         obj.update("E", c1);
        obj.listAll();
         }
         }```
导入java.util.array; 导入java.util.HashMap; 导入java.util.Iterator; 导入java.util.Map; 导入java.util.Scanner; 班级联系{ 私人字符串名称,电子邮件; 私人int移动电话; 公众联络(){ name=null; 电子邮件=空; mobile=0; } 公共联系人(字符串名称、字符串电子邮件、int-mobile){ 超级(); this.name=名称; this.email=电子邮件; this.mobile=mobile; } 公共字符串getName(){ 返回名称; } 公共void集合名(字符串名){ this.name=名称; } 公共字符串getEmail(){ 回复邮件; } 公用电子邮件(字符串电子邮件){ this.email=电子邮件; } public int getMobile(){ 返回手机; } 公共移动电话(国际移动电话){ this.mobile=mobile; } @凌驾 公共字符串toString(){ 返回“Contact[name=“+name+”,email=“+email+”,mobile=“+mobile+””; } } 接口通讯录{ 无效添加(联系人); 无效更新(字符串名称、联系人); 无效删除(字符串名称); void find(字符串名); void listAll(); } 类ContactBookImpl实现ContactBook{ 触点=新触点(); 扫描仪sc=新的扫描仪(System.in); 私人HashMap联系人簿; 公共联系人bookimpl(){ contactBook=新建HashMap(); } @凌驾 公共无效添加(联系人){ contactBook.put(contact.getName(),contact); } @凌驾 公共void查找(字符串名称){ if(联系人簿.containsKey(姓名)){ System.out.println(“找到记录…”); System.out.println(contactBook.get(name)); }否则{ System.out.println(“未找到记录”); } } @凌驾 公共无效列表全部(){ 迭代器entryitr=contactBook.entrySet().Iterator(); while(entryitr.hasNext()){ Map.Entry=(Map.Entry)entryitr.next(); //System.out.print(entry.getKey()+“:”); System.out.println(entry.getValue()); } } @凌驾 公共无效删除(字符串名称){ if(联系人簿.containsKey(姓名)){ contactBook.remove(name,contactBook.get(name)); System.out.println(“删除的数据…”); } } @凌驾 公共无效更新(字符串名称、联系人){ if(联系人簿.containsKey(姓名)) { System.out.println(“您想要更新什么(姓名/电子邮件/手机)?”; 如果(sc.next().equals(“Name”)) { System.out.println(name+”应替换为“); 字符串名称2=sc.next(); 联系人:setName(name2); //contactBook.replace(name,contact.setName(name2)); } 如果(sc.next().equals(“电子邮件”)) { System.out.println(name+”应替换为“); 字符串email2=sc.next(); 联系人:setEmail(email2); } 如果(sc.next().equals(“Mobile”)) { System.out.println(name+”应替换为“); int no2=sc.nextInt(); 联系人:setMobile(2号); } } } } 公共类联系人簿\u HashMap{ 公共静态void main(字符串[]args){ ContactBookImpl obj=新建ContactBookImpl(); 触点c1=新触点(“a”、“E”、91); 触点c2=新触点(“b”、“M”、92); 触点c3=新触点(“c”、“A”、93); 对象添加(c1); 对象添加(c2); 对象添加(c3); obj.listAll(); 目标更新(“E”,c1); obj.listAll(); } }```
这里有很多事情需要提及

  • 您在更新方法中使用的是
    sc.next()
    ,而没有考虑代码流。相反,将
    sc.next()
    分配给字符串变量,并在条件中使用该变量
  • 您不必在更新呼叫中传递联系人。更新调用必须从hashmap中选择联系人,然后执行更新
  • 由于使用了
    HashMap
    ,并且密钥是用户的姓名,因此必须删除之前的条目,然后如果姓名是需要更新的姓名,则必须添加更新的联系人
  • 不是完整的代码

    公共无效更新(字符串名称){
    if(联系人簿.containsKey(姓名)){
    Contact Contact=contactBook.get(姓名);
    System.out.println(“您想要更新什么(姓名/电子邮件/手机)?”;
    字符串响应=sc.next();
    if(response.equals(“Name”)){
    //更新名称,如contact.setName(“新名称”);
    }
    如果(回复等于(“电子邮件”)){
    //更新电子邮件
    }
    if(response.equals(“Mobile”)){
    //更新手机号码
    }
    contactBook.remove(name);//从地图中删除联系人
    System.out.println(“联系人已升级”+联系人);
    contactBook.put(contact.getName(),contact);//将更新的联系人添加到地图
    }
    
    您好,您正在按姓名添加联系人:a、b、c。然后您尝试用姓名“E”更新联系人,但该姓名不存在。我添加了“E”,因为我正在检查电子邮件,这里我得到了Stuck此代码,尽管有效,但效率非常低。联系人=联系人簿。获取(姓名);您将获得一个指向contactBook的指针,因此您在contact中执行的所有更新都将反映在contactBook中。因此,无需像contactB那样删除和放置