【问题标题】:Android Loading Strings into ArrayAndroid将字符串加载到数组中
【发布时间】:2011-11-19 18:53:27
【问题描述】:

我有一个 1000 个单词的列表。我需要从该列表中加载一个包含 n 个随机选择的单词的数组(不允许重复)。这样做的最佳方法是什么?

我的想法:

1) 将单词加载到 R.arrays 以创建字符串数组。使用 collections.shuffle 对数组进行洗牌,然后从中提取前 n 个条目。现在,我在使用这种方法加载包含 1000 个单词的初始数组时遇到了内存问题。

2) 将单词加载到文本文件中,将每个单词读入字符串数组。使用相同的方法获取前 n 个条目。

3) 将单词的输入硬编码到字符串数组中(我当然会使用脚本来获取该输出)。使用相同的方法获取前 n 个条目。

有没有更好的办法?

【问题讨论】:

    标签: android arrays string text load


    【解决方案1】:

    如果您主要担心内存使用并且愿意放弃计算速度,那么这里有一个算法可以帮助您实现目标。

    将您的单词保存在一个文本文件中,每行一个单词,每个单词的字符数量固定,每个单词末尾用空格填充以确保固定的单词字符大小,称之为s

    1. 创建一个最大大小的数组n,命名为w
    2. 打开包含 1000 个单词的文件的流式阅读器
    3. 得到一个1到1000之间的随机数,叫它k
    4. 在文件流中寻找k*s 的位置并抓取下一个s 字符
    5. 如果该词在数组中尚不存在,则将该词添加到w
    6. 如果 w 数组已满(即 size=n),我们就完成了,否则返回第 3 步

    让我们知道进展如何。编码愉快!

    【讨论】:

    • 这似乎已经够疯狂了。知道为什么当我直接从 R.arrays 加载字符串时 Android 会抱怨吗? 1000 个字符串真的会占用那么多内存吗?
    • 是的,字符串非常昂贵。当记忆成为问题时,我会尽可能远离它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多