gpt4 book ai didi

java - Hashtable 适合存储 Assets 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:23:30 25 4
gpt4 key购买 nike

我有 Actionscript3 背景,这是我一生中第一次编写任何 Java。哈希表似乎类似于 Flash 中的字典,但我想确保我正确地使用了它们。我相信 Hashtable 的类型是接受字符串作为键和字体作为对象。这个对吗?是否有一个不同的 Collection 子类更适合这样的事情?无论如何,请撕掉我的 n00b Java。我需要学习这个。

package com.typeoneerror.apps.app_name.utils;

import android.content.Context;
import android.graphics.Typeface;

import java.util.Hashtable;

public class FontRegistry
{
private static FontRegistry _instance;

private Context _context;
private Hashtable<String, Typeface> _fonts;

private FontRegistry()
{
_fonts = new Hashtable<String, Typeface>();
}

public static FontRegistry getInstance()
{
if (_instance == null)
{
_instance = new FontRegistry();
}
return _instance;
}

public void init(Context context)
{
_context = context;

}

public Typeface getTypeface(int resourceId)
{
String fontName = _context.getResources().getString(resourceId);
if (!_fonts.containsKey(fontName))
{
String fontPath = "fonts/" + fontName;
Typeface typeface = Typeface.createFromAsset(_context.getAssets(), fontPath);
_fonts.put(fontName, typeface);
}
return (Typeface)_fonts.get(fontName);
}
}

最佳答案

给你两个建议。

首先,变量类型应该是指Map的接口(interface)。这为您的 future 提供了更大的灵 active ,并将与大多数其他 Java 开发人员更好地融合。

其次,实现应该是一个HashMap,而不是一个HashTable。 HashTable 同步所有内容,而 HashMap 不同步。

如果您确实需要多线程访问,我建议您使用 ConcurrentHashMap 而不是 HashTable。 ConcurrentHashMap 性能更好,因为它在访问期间不会锁定整个映射。

所以,

private Map<String, Typeface>     _fonts;

_fonts = new HashMap<String, Typeface>();

最后,许多 Java 开发人员不希望成员变量以下划线开头。尽管这是一个有争议的偏好。

编辑:最后一个吹毛求疵。您似乎正在为注册表使用单例模式。这可能会在以后咬你,所以考虑避免单例 http://accu.org/index.php/journals/337 .但是,忽略这一点,您最好在声明中实例化单例静态实例。可以避免第一次获取时可能发生的争用。

所以:

private static FontRegistry _instance = new FontRegistry;

关于java - Hashtable 适合存储 Assets 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4832505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com