Java 更新记录时如何使用替换方法?
我正在使用HashMap创建一个联系人簿实现,但是在更新记录时,我不知道如何使用replace(K,V)方法,所以我临时使用setter方法。我想让用户选择他们想要更新的名称/电子邮件/手机。If Name然后将用新名称替换现有名称,也将用于电子邮件和手机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
```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
,并且密钥是用户的姓名,因此必须删除之前的条目,然后如果姓名是需要更新的姓名,则必须添加更新的联系人公共无效更新(字符串名称){
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那样删除和放置