做这个设计方案的时候卡壳了,请大家帮我想想思路。
缓存的设计,摆脱各位大神了。
public class Test02
{
    public static void main(String[] args)
    {
        /*
          设计初衷:
          1. Bean对象相当庞大,相同数据特别多,内存消耗大。
          2. 对值相同的Bean进行同时修改的操作也相当多,如果进行遍历修改,非常耗时。
          
          设计目标:
          1. 实现一个缓存进行管理,如果重新生成的一个Bean对象等于缓存中的某个值,将该对象抛弃,直接引用缓存中的值。
          2. 做以上操作时,时间要快。
         */
        
        Bean b01 = new Bean();
        b01.setName("Hello");
        //TODO 加入自己实现缓存
        Bean b02 = new Bean();
        b02.setName("Hello");
        //TODO 缓存的管理
        
        //实现以下功能
        //if b01.equals(b02) == true
        System.out.println(b01 == b02);  //结果应该为true
        //意思就是b01和b02使用相同的一个引用
        
        /*
        //和Java自身的String管理雷同的功能
        String a = "hello";
        String b = "hello";
        System.out.println(a == b);  //结果为true
        a = "world";
        System.out.println(a == b);  //false
        b = "world";
        System.out.println(a == b);   //true
        */
    }
}public class Bean
{
    private String name = null;
    private String value = null;
    
    ....
    
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }
    ....
    
}

解决方案 »

  1.   

    不行,Bean对象不能随意做共享。因为你无法得知其需要做修改的时机点,这样做非常危险。也就是说 A B 两个线程在操作的Bean,恰好是同名的“张三”(现实社会重名很正常);
    于是你的程序中实际共享了 b01,然后A线程设置其身高或年龄进行修改。
    那么B线程原来所访问的同名“张三”,就被莫名其妙的修改了身高或年龄了。
    合理的节省内存方式,就是把可以共享的Bean直接封装为单例,这个如果你使用Spring的话,直接可以借助Spring框架来实现。
      

  2.   

    个人感觉如果想实现楼主的想法就是要重写==,而String的==是jvm控制的。可以重写equals方法,判断那么是否一致,如果一致则返回true。每当new一个对象时已经为该对象分配内存了,所以new是不可取的。可以用池的概念,每当像去创建新对象时就去池里查询有无name相同的对象,如果有则直接取用,否则创建对象