java– 通过PoolObjectFactory接口使用Pool类实例化

java– 通过PoolObjectFactory接口使用Pool类实例化,第1张

概述下面是使用JavaPool(泛型池)为Android实例化TouchEvents的示例:importjava.util.ArrayList;importjava.util.List;publicclassPool<T>{publicinterfacePoolObjectFactory<T>{publicTcreateObject();}privatefinalList<T>freeO

下面是使用Java Pool(泛型池)为Android实例化touchEvents的示例:

import java.util.ArrayList;import java.util.List;public class Pool<T> {    public interface PoolObjectFactory<T> {        public T createObject();    }    private final List<T> freeObjects;    private final PoolObjectFactory<T> factory;    private final int maxSize;    public Pool(PoolObjectFactory<T> factory, int maxSize) {        this.factory = factory;        this.maxSize = maxSize;        this.freeObjects = new ArrayList<T>(maxSize);    }    public T newObject() {        T object = null;        if (freeObjects.isEmpty()) {            object = factory.createObject();        } else {            object = freeObjects.remove(freeObjects.size() - 1);        }        return object;    }    public voID free(T object) {        if (freeObjects.size() < maxSize) {            freeObjects.add(object);        }    }}

但是,我真的不明白这段代码是如何工作的:

if (freeObjects.isEmpty()) {    object = factory.createObject();} else {    object = freeObjects.remove(freeObjects.size() - 1);}

让我们说:

touchEventPool = new Pool<touchEvent>(factory, 100);

这是否意味着它将存储一个包含100个事件的数组(当#101进入内部时,将像先进先出一样处理#1)?

我认为它应该保留一些最大数量的对象,然后处理额外的.我读了10次书的描述……但是无法得到它.也许有人解释这是如何工作的?

解决方法:

I assume it supposed to hold some maximum number of objects and then dispose the extra. I read book’s description like 10 times.. and Couldn’t get it. Maybe someone explain how this works?

有点.该类在名为pool的List中保留预先创建的对象的缓存.当您要求新对象(通过newObject方法)时,它将首先检查池以查看对象是否可用.如果池为空,则只创建一个对象并将其返回给您.如果有可用的对象,它将删除池中的最后一个元素并将其返回给您.

注释:

if (freeObjects.isEmpty()) {    // The pool is empty, create a new object.    object = factory.createObject();} else {    // The pool is non-empty, retrIEve an object from the pool and return it.    object = freeObjects.remove(freeObjects.size() - 1);}

当您将对象返回到缓存(通过free()方法)时,如果尚未满足池的最大大小,则只会将其放回池中.

注释:

public voID free(T object) {    // If the pool is not already at its maximum size.    if (freeObjects.size() < maxSize) {        // Then put the object into the pool.        freeObjects.add(object);    }    // Otherwise, just ignore this call and let the object go out of scope.}

如果已达到池的最大大小,则不会存储您正在释放的对象,并且(可能)会进行垃圾回收.

总结

以上是内存溢出为你收集整理的java – 通过PoolObjectFactory接口使用Pool类实例化全部内容,希望文章能够帮你解决java – 通过PoolObjectFactory接口使用Pool类实例化所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1107717.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存