2

如果在应用程序的动态行为期间需要它们,存储大量值对的最佳方法是什么?在内存中(例如 LinkedHashMap)还是 SQLite DB?我有超过 4000 行的 personID 和 personName,我需要一个 EditText 和一个 Spinner。如果我在 EditText 中输入正确的 personID,Spinner 应该跳转到正确的 personName,但 Spinner 也应该包含所有的 personNames。

目前我已经通过以下方式实现了“内存中”的解决方案,因为一个简单的数组不能大于 64k。代码当然是生成的。我也尝试在 XML 中定义数组,但它也有相同的限制。

public enum CompPeople {
    INSTANCE;

    public LinkedHashMap<Short, String> peopleIDs = new LinkedHashMap<Short, String>();

    public void initialize() {
        peopleIDs = new LinkedHashMap<Short, String>();
        setPeople1();
        setPeople2();
        setPeople3();
        setPeople4();
    }

    public void setPeople1() {
        peopleIDs.put(new Short((short) 1011), "John Doe");
        peopleIDs.put(new Short((short) 1012), "Jack Knight");
        peopleIDs.put(new Short((short) 1013), "Sue Doe");
        ...
    }

    public void setPeople2() {
        ...
    }

    public void setPeople3() {
        ...
    }

    public void setPeople4() {
        ...
    }
}

如果 SQLite 方式会更好,有没有比这里描述的在第一次运行应用程序时初始化数据库更好的解决方案?: http ://www.reigndesign.com/blog/using-your-own-sqlite-数据库在-android-applications/

提前致谢!

4

1 回答 1

3

需要考虑的几点:

  1. 在数据库和内存结构之间做出决定时,第一个关注点必须是持久性要求。如果您需要在应用程序退出后保留数据,那么您不得不使用某种持久存储,即数据库或平面文件。

  2. 无论如何完成,在数据库中持久化对象都会变得更慢,并且可能更难以编程。如果您可以将对象舒适地放入内存中,那么使用数据库将不需要额外的复杂性。

  3. 一般而言, 4000 行并没有那么大,尽管如果由于存储 blob 等原因行大小足够高,它可能在嵌入式设备的上下文中。您希望每行占用多少空间?因为如果我们谈论的是 3-4 MB,那么你最好只使用内存结构......

于 2012-12-30T08:49:05.380 回答