缓存的思想

缓存的思想
单例模式的懒汉式实现还体现了缓存的思想,缓存也是实际开发中非常常见的功能。简单讲就是,如果某些资源或者数据会被频繁的使用,可以把这些数据缓存到内存里面,每次操作的时候,先到内存里面找,看有没有这些数据,如果有,那么就直接使用,如果没有那么就获取它,并设置到缓存中,下一次访问的时候就可以直接从内存中获取了。从而节省大量的时间,缓存是一种典型的时间换空间的方案。

//java中缓存的基本实现示例
public class JavaCache {
    //缓存数据的容器,定义成Map是方便访问,直接根据key就可以获取Value了
    //key选用String是为了简单,方便演示
    private Map<String, Ojbect> map = new HashMap<String, Object>();
    //从缓存中获取值
    public Object getValue(String key) {
        //先从缓存里面取值
        Object obj = map.get(key);
        //判断缓存里面是否有值
        if (obj == null) {
            //如果没有,那么就去获取相应的数据,比如读取数据库或者文件
            //这里只是演示,所以直接写个假的值
            obj = key+",value";
            //把获取的值设置回到缓存里面
            map.put(key, obj);
        }
        //如果有值了,就直接返回使用
        return obj;
    }
}

为了方便理解,再举几个具体应用,一个是项目中的,一个是算法题

public class Test {
    public static void main(String[] args) {
        List<String> v_subList = new List<String>();
        v_subList.add("Proxy123");
        v_subList.add("Proxy456");
        v_subList.add("static123");
        v_subList.add("static456");
        v_subList.add("public123");
        v_subList.add("public456");

        Map<String, List<String>> map = m1(v_subList);
        //业务逻辑的话,需要哪个组就可以获取到哪个组的所有节点名
        List<String> ProxyList = map.get("Proxy");

        //业务逻辑是分组处理业务的,所有直接遍历map就行了,map里面已经用list分好了
    }

    public static Map<String, List<String>> m1(List<String> v_subList) {
        //这个map的key是组名,就是v_Group,value就是所有以v_Group开头的节点名,用list存储
        Map<String, List<String>> map = new HashMap<String, List<String>>();
        //遍历所有节点
        for (String v_Name : v_subList) {
            //提取当前节点的组名
            String v_Group = v_Name.substring(0, v_Name.length() - 3);
            //看看map中有没有对应的list
            List<String> v_GroupList = map.get(v_Group);

            //如果没有的话就初始化一个,并且把v_Name扔进list中
            if (v_GroupList == null) {
                v_GroupList = new ArrayList<String>();
                v_GroupList.add(v_Name);
                map.put(v_Group, v_GroupList);
            } else {
                //如果有直接扔到list中
                v_GroupList.add(v_Name);
            }
        }

        return map;
    }
}
//问题描述:给定一字符串,相同的字符只保留第一次出现的,比如qwwewee 123321-------------qwe 123
public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        String input = s.nextLine();
        Map<Character, Integer> map = new HashMap<Character, Integer>();
        for (int i=0; i<input.length(); i++) {
            char c = input.charAt(i);
            if (map.get(c) == null) {
                map.put(c, i);

                System.out.print(c);
            }
        }
    }
}

实现缓存机制的步骤:
1.定义一个存放缓存数据的容器
2.从缓存中获取数据的做法
先从缓存里面取值
判断缓存里面是否有值
如果有值了,就直接使用这个值
如果没有,那么就去获取相应的数据,或者创建相应的对象
把获取的值设置回到缓存里面

web开发Scope->就是数据的缓存范围

//<jsp:useBean name="aa" class="com.yhc.AModel" scope="request">
//思路应该是差不多的
Object obj = request.getAttribute("aa");
AModel am = null;
if (obje == null) {
    am = new AModel();
    request.setAttribute("aa", am);
} else {
    am = (AModel)obj;
}

使用缓存来模拟实现单例

public class Singleton {
    //定义一个缺省的key值,用来标识在缓存中的存放
    private final static String DEFAULT_KEY = "One";
    //缓存实例的容器
    private static Map<String, Singleton> = new HashMap<String, Singleton>();
    private Singleton() {}
    public static Singleton getInstance() {
        //先从缓存中获取
        Singleton instance = (Singleton) map.get(DEFAULT_KEY);
        //如果没有,就新建一个,然后设置回缓存中
        if (instance == null) {
            instance = new Singleton();
            map.put(DEFAULT_KEY, instance);
        }
        //如果有就直接使用
        return instance;
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android的Recycle缓存是一种用于提高应用程序性能的机制,它可以避免在加载相同数据时重复创建对象,从而节省了内存。Recycle缓存可以应用于RecyclerView、ListView等控件中,它可以缓存控件中的Item View,以便在滑动时可以重用这些View,避免不断地创建和销毁,从而提高了滑动的流畅性。在使用Recycle缓存时,需要注意一些细节,如确保不要在ViewHolder中直接保存数据等。 ### 回答2: Android中的Recycle缓存是指通过复用已经创建的对象来减少内存的使用和提高性能。在Android开发中,当不再需要某个对象时,可以通过将该对象添加到Recycle缓存中,以便在下次需要该类型的对象时,直接从缓存中获取,而不需要重复创建。 Recycle缓存主要应用于以下几个方面: 1. View的缓存:在使用ListView、RecyclerView等列表控件时,通过Recycle缓存可以复用已经创建的ItemView,避免频繁的创建和销毁,提高列表的滑动性能。 2. Bitmap的缓存:在加载和显示图片时,可以将Bitmap对象添加到Recycle缓存中,当再次需要显示相同的图片时,从缓存中获取,避免重新解码图片,减少内存的消耗。 3. Object Pool的缓存:在一些需要频繁创建和销毁对象的场景中,可以使用Recycle缓存来管理对象的创建和回收,避免频繁的GC操作,提高应用的性能。 Recycle缓存的实现可以通过一些方式来完成,比如使用LruCache来管理缓存对象的容器,通过软引用或者弱引用来管理缓存对象的生命周期,或者使用对象池来管理对象的复用。 总之,Recycle缓存是Android开发中一种重要的优化技术,通过复用已经创建的对象,可以减少不必要的内存开销和对象创建的时间,从而提高应用的性能和用户体验。 ### 回答3: Android 中的 Recycle 缓存是一种优化技术,用于复用已经创建的对象,以减少内存的使用和提高性能。在 Android 应用中,创建和销毁对象会占用很多内存和 CPU 资源,如果每次都重新创建对象,会导致频繁的内存分配和垃圾回收,影响应用的响应速度和流畅度。 Recycle 缓存的主要思想是将已经创建的对象在不需要时放入一个缓存池中,并在需要时从缓存池中取出复用,而不是重新创建。这样可以减少内存分配和垃圾回收的开销,提高应用的性能表现。 对于 Android 中的 RecyclerView 控件来说,Recycle 缓存起到了至关重要的作用。RecyclerView 是用于展示大量数据列表的一种常用控件,它通过复用列表项的视图来提高渲染性能。 当有新的列表项进入屏幕时,RecyclerView 会从 Recycle 缓存池中获取一个可复用的视图,并绑定新的数据进行显示。这样就避免了每次都创建新的视图和绑定数据的开销。 同时,RecyclerView 提供了一种 ViewHolder 模式,这是一种更加高效的复用方案。ViewHolder 持有列表项的视图,并缓存视图中的子视图引用,避免了频繁的 findViewById 操作。这也是 Recycle 缓存在 RecyclerView 中的具体应用。 总结来说,Android 的 Recycle 缓存是一种优化技术,用于复用已经创建的对象,提高性能和减少内存开销。在 RecyclerView 中,Recycle 缓存通过复用视图和 ViewHolder,提高列表渲染的性能和流畅度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值