将ID列表与其对应的对象进行匹配

时间:2011-07-03 10:00:38

标签: java dictionary arraylist

我有Dictionary<int BossID, string BossName> ListOfBossesDictionary<String EmpName, int BossID> ListOfEmps。当然,将BossID与Boss匹配并返回'Dictionary WhoIsMyBoss'。

我不知道从哪里开始用Java。

就这两个名单而言,我们假设老板与英雄之间存在一对多的比例。并且BossID是从1-n增量的。

我想我会在我的文盲Java中做以下几点。 。

Dictionary<BossName, EmpName> WhoIsMyBoss;
ArrayList<Integer> AnotherListOfBosses;
private int Boss;
for (String EmpName: ListOfEmps)
        Boss = ListOfEmps.get(EmpName)
        WhoIsMyBoss.put(ListofBosses(Boss) , EmpName);
        AnotherListOfBosses.add(Boss);
}
for(int Boss: AnotherListOfBosses)
{
     ListOfBosses.remove(Boss)
}

那应该留给我一份老板和雇员名单和一份 希望没有相应员工的ListOfBosses。

这看起来怎么样? Dictionary是使用正确的集合吗?任何改进都将不胜感激。

3 个答案:

答案 0 :(得分:1)

Dictionary已过时,因此您应该使用某种Map代替(通常是HashMap)。此外,调用变量...List是非常误导的,因为有一个非常常见的集合类型称为List,它做了不同的事情(它表示排序,但不是映射),所以你应该打电话给你变量...map也是如此。

由于一个老板可以拥有多名员工,因此映射应该是从员工到老板,而不是相反的方式(密钥总是先命名)。相应的put也是错误的方式。

还有一些其他问题缺少声明和缺少get(),但编译器应该直接在那里设置。

答案 1 :(得分:1)

  

非常感谢任何改进。

您需要了解标识符的Java样式规则。

  • 类名是以大写字母开头的驼峰案例。
  • 方法名称,变量名称,参数和属性是以小写字母开头的驼峰案例。
  • 包名称均为小写
  • 常量(例如static final变量)名称全部为大写,下划线为名称分隔符。

答案 2 :(得分:1)

正如Kilian Foth所提到的,你应该使用Map而不是Dictionary。另外在Java中,惯例是使用小写和类名大写字母来启动变量名。

你说名字是字符串,ID是整数。

public class BossExample {
  // Key: Boss-ID, Value: Boss name
  private Map<Integer, String> mapOfBosses = new HashMap<Integer, String>();

  // Key: Emp name, Value: Boss-ID
  private Map<String, Integer> mapOfEmps = new HashMap<String, Integer>();

  // Constructor fills the maps
  public BossExample() {
    // ...
  }

  // Returns a mapping from Emp name to Boss name
  public Map<String, String> getEmpToBossMap() {
    final Map<String, String> empToBossMap = new HashMap<String, String>();

    // Iterate through mapOfEmps via entrySet giving you key and value 
    // at the same time
    for(Map.Entry<String, Integer> empEntry : mapOfEmps.entrySet()) {
      // Put the Emp name as key and the retrieved Boss name as a value into 
      // the result map.
      empToBossMap.put(empEntry.getKey(), mapOfBosses.get(empEntry.getValue()));
    }

    return empToBossMap;
  }
}