可以控制Java中对象的身份,如果是,如何控制?

这是一个简单的编程问题.我不是 Java专家.假设我使用自定义类Company和Employee的对象,方式类似于许多RDBMS示例所做的方式:
class Employee
{
    Company company;
}

class Company
{
    String name;
}

我需要保证不同的Company对象具有唯一的名称 – 即没有两个这样的对象可能具有相同的名称,因为从我的角度来看它没有任何意义,也只是吃内存 – 如果两个员工在IBM工作,那么具有该名称的单个Company对象period.

我现在的想法是将公司构造函数设为私有 – 以便将具有任意名称的公司对象分配的工作委托给受信任的方法 – 假设这将拒绝任何后续尝试创建具有已存在名称的对象或返回现有或新对象(必要时创建一个).

问题是,我不知道如何优雅地完成这一任务.一件好事就是每次请求具有名称的Company对象时都不必进行O(n)查找 – 所以为了方便我可能会使用哈希映射或二叉树吗?我还想覆盖公司对象的识别方式 – 这导致我:我会覆盖Object.equals和/或Object.hashCode方法吗?

解决方法

看一下flyweight模式.

我会做的是:

// incomplete,but you get the idea hopefully
CompanyFactory
{
    private Map<String,Company> companies;

    public getCompany(final String name)
    {
        Company company;

        company = compaines.get(name);

        if(company == null)
        { 
            company = new Company(name);
            companies.put(name,company);
        }

        return (company);
    }
}

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...