【发布时间】:2012-06-01 08:17:23
【问题描述】:
我有一个 JSF 表,它使用 Hashmap 来存储选中的复选框。我的问题是:是否可以使用 2D Java 数组来存储键而不是 Hashmap?
编辑
我使用此代码来存储选定的键。如何为Map 重写这段代码?
private HashMap<String, Boolean> selected = new HashMap<>();
// send the list
public Map<String, Boolean> getselected() {
return selected;
}
我的想法是创建 2D 数组(将使用 MAP),它将存储页数和页面上的列表。例如 100 页 x 10 个键。
编辑 2
我创建了具有延迟加载的 JSF 表,该表从 Oracle 获取数据。 JSF 工作得非常好而且很快。我面临的问题是,当我尝试创建 select all 复选框时,该复选框将获取所有密钥并将密钥存储到 hashmap 中。稍后这些键将用于 SQL 查询以删除用户选择的行。
我创建了包含 10 000 行的数据库表并将它们显示到 JSF 表中。当我单击它们时,我用 10 000 创建了 hashmap。对于该大小,性能相对较好。我测试删除它们 - 我创建了 Java 方法,该方法采用生成的 hashmap 并使用存储在 hashmap 中的键删除数据库行。它的显示,但可以做一些代码优化。
最大的问题是可扩展性。我用 1 000 000 个键测试了hashmap - 它可以工作,但速度非常慢。我需要设计 JSF 表来处理非常大的数据。
我认为解决方案是使用 2D 数组(让我们在这个例子中调用它)。我将这样解释我的想法:
例如,我将有 100 页的 JSF 表。每页将有 10 行。进入标准 hashmap 当我选择所有行时,我将有 1000 个键。
在二维数组解决方案中,我可以创建包含 100 个元素的数组,当我在页面之间切换时,我将只有 10 行,这些行将从分页代码中生成。当我选择所有数据库行时,我只能将可见行键插入二维数组。数组中的其他位置我替换为例如1,以便知道有什么东西。当我按下删除按钮时,Java 代码将知道所有元素都是“虚拟”选择的。有没有更好更简单的解决方案?
【问题讨论】:
-
你为什么不使用一个简单的数组列表呢? (保持简单...)
-
我想做一个懒加载的实验。
-
@Daniel 你知道这可能吗?
-
自己没试过……BalusC给了你很好的答案……
-
INMO 你最好只选择可见的行......而不是其他分页页面上的行......如果用户想要删除表中的所有行,你最好提供额外的按钮“删除所有行”