java - 如何使用HashMap模拟缓存

标签 java arraylist collections hashmap

我想计算给定字符串中的唯一字符并使用集合缓存它们,这样如果字符串已经存在,则不会再次计算。为此,我使用了HashMap,我将字符串作为键,并将其作为值。我编写了以下代码,但它不会在 map 中添加这些键值对。如何解决这个问题?

class UniqueCharacters {

    public int uniqueCharacters(String s)
    {
        List<Character> list=new ArrayList<Character>();
        for(int i=0; i<s.length();i++)
        {
            if(!(list.contains(s.charAt(i))))
            {
                list.add(s.charAt(i));
            }
        }
        for(Character c:list)
        {
            System.out.println(c);
        }
        int count=list.size();
        maintainCache(s, count);

        System.out.println(count);
        return count;
    }

    public void maintainCache(String s, int count)
    {
        Map<String,Integer> map=new HashMap<String,Integer>();
        for(Map.Entry<String, Integer> entry: map.entrySet())
        {
            if(entry.getKey().equals(s))
            {
                System.out.println(entry.getKey()+" "+entry.getValue());
                System.out.println("String was already there");
            }
            else
            {
                map.put(s, count);
                System.out.println("String added to the cache");
            }
        }
    }
}

public class UniqueCharactersTest {

    public static void main(String[] args) {
        UniqueCharacters u=new UniqueCharacters();
        u.uniqueCharacters("hello");
    }
}

最佳答案

maintainCache 每次调用时都会创建一个新的局部变量 map。如果您希望该映射在调用之间保留其值,则应该将其从方法中提取出来并将其保留为成员。

关于java - 如何使用HashMap模拟缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52345664/

相关文章:

java - 从多个类访问和修改一个类中的ArrayList/TreeSet

Java从文件中读取内容到ArrayList(对象)

php - Laravel 5 - SimplePaginate 函数在这里不起作用?

java - ArrayList.toString 异常

java - 修改Map中对象的成员

typescript - 在 Aurelia 模板中......哪些对象是可迭代/可重复的?

java - 将字符串拆分为用户所需的字符数

java - 如何相交多个集合?

java - 如何将 java swing 应用程序转换为在 android 上工作

java - 我可以在多个环境中使用单个 war 文件吗?我是不是该?