2012-06-27 79 views
2

我需要一个哈希映射的搜索方法,我无法完全弄清楚如何去做。我也试图做一个编辑方法,我认为这是我需要的方法。我的哈希映射是存储员工数据。我有MainApp,Employee类和EmployeeStore类。谁能帮忙?哈希映射的搜索方法

public class MainApp 
{ 

    public static void main(String[] args) 
    { 
     new MainApp().start(); 

    } 
    public void start() 
    { 
     EmployeeStore Store = new EmployeeStore(); 
     Store.add(new Employee ("James O' Carroll", 18,"hotmail.com")); 

     Store.add(new Employee ("Andy Carroll", 1171,"yahoo.com")); 

     Store.add(new Employee ("Luis Suarez", 7,"gmail.com")); 
     Store.print(); 
     Store.clear(); 
     Store.print(); 

     Store.add(new Employee ("James O' Carroll", 18,"hotmail.com")); 

     Store.add(new Employee ("Andy Carroll", 1171,"yahoo.com")); 

     Store.add(new Employee ("Luis Suarez", 7,"gmail.com")); 

     Store.print(); 
     Store.remove("Andy Carroll"); 
     Store.print(); 


    } 

} 


//Imports. 
import java.util.HashMap; 
//******************************************************************** 
import java.util.Map; 

public class EmployeeStore 
{ 
    HashMap<String, Employee> map; 

//Constructor. 
    public EmployeeStore() 
    { 
     map = new HashMap<String,Employee>(); 
    } 
//******************************************************************** 
//Hashmap Methods. 
//Add to the Hashmap : Employee. 
    public void add(Employee obj) 
    { 

     map.put(obj.getEmployeeName(), obj); 
    } 
//******************************************************************** 
//Remove from the Hashmap : Employee. 
    public void remove(String key) 
    { 
     //Remove the Employee by name. 
     map.remove(key); 
    } 
//******************************************************************** 
//Clear the Hashmap : Employee. 
    public void clear() 
    { 
     map.clear(); 
    } 
    //******************************************************************** 
//Print the Hashmap : Employee. 
    public void print() 
    { 
     System.out.println("\n********Employee's in the Company.********"); 
     for (Employee employee : map.values()) 
     { 
      System.out.println("Employee Name:\t" + employee.getEmployeeName()); 
      System.out.println("Employee Id:\t" + employee.getEmployeeId()); 
      System.out.println("E-mail:\t"+ employee.getEmployeeEmail()); 
     } 

    } 


//******************************************************************** 
//******************************************************************** 


} 

//Imports: 

//******************************************************************** 
//Employee Class. 
public class Employee 
{ 
//Variables. 
    private String employeeName; 
    private int employeeId; 
    private String employeeEmail; 
//******************************************************************** 
//Constructor. 
    public Employee(String employeeName, int employeeId, String employeeEmail) 
    { 
     this.employeeName = employeeName; 
     this.employeeId = employeeId; 
     this.employeeEmail = employeeEmail; 
    } 
//******************************************************************** 
//Getters. 
    public String getEmployeeEmail() { 
     return employeeEmail; 
    } 
    public void setEmployeeEmail(String employeeEmail) { 
     this.employeeEmail = employeeEmail; 
    } 
    public String getEmployeeName() { 
     return employeeName; 
    } 
    public int getEmployeeId() { 
     return employeeId; 
    } 
//******************************************************************** 
//toString method. 
    public String toString() { 
     return "Employee [employeeName=" + employeeName + ", employeeId=" 
       + employeeId + ", employeeEmail=" + employeeEmail + "]"; 
    } 
//******************************************************************** 





} 
+0

你想要搜索什么? Eployees只有他们的名字? – dantuch

+0

员工按名称,ID和电子邮件地址。 – Pendo826

+0

按名称很容易('map.get(name)'),但其他事情很难。你想让我告诉你如何去做? –

回答

7

由于这是功课,我只会引导你。


你有两个选择:

他们首先是创造更多的地图,测绘id - Employeeemail - Employee,然后填写所有三个地图增加新员工时。获得员工需要在其中一张地图上使用Map.get(key)方法。

,似乎是更好的相适应您的需求,选项是检索从地图中的所有值 - 使用Map.values(),在它们之间迭代(使用foreach),并检查是否id或给予员工的email是一个你正在寻找 - 使用object.equals(object2)方法。



和最后一两件事 - 尝试写clean code,所以准确的命名 - 代替:

public void add(Employee obj) 
{ 
    map.put(obj.getEmployeeName(), obj); 
} 

尝试以下操作:

public void add(Employee employee) 
{ 
    map.put(employee.getEmployeeName(), employee); 
} 

确实化妆差异,相信我:)

编辑:

再回到命名建议 - 当你有类命名Employee其冗余命名法中字Employee - 当你与employee.getEmployeeName()一样。

这是相当明显的,要得到empoyee,而不是他的狗,也没有沙发:) employee.getName()的名称(即获得命名字段的值 - 不是MYNAMEemployeeName)是simpliest和最佳想法,你应该有:)

+3

和+1的命名建议。随着程序复杂性的增长,它的确得到了回报。 – Soronthar

+0

@dantuch你好老师! +1 –

+0

@Zagorulkin德米特里,谢谢! ;) – dantuch