Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以使用2D数组来存储JSF复选框?_Java_Jsf_Jsf 2_Hash - Fatal编程技术网

Java 是否可以使用2D数组来存储JSF复选框?

Java 是否可以使用2D数组来存储JSF复选框?,java,jsf,jsf-2,hash,Java,Jsf,Jsf 2,Hash,我有一个JSF表,它使用Hashmap来存储选中的复选框。我的问题是:是否可以使用2D Java数组而不是Hashmap来存储密钥 编辑 我使用此代码存储选定的键。如何为Map重写此代码 private HashMap<String, Boolean> selected = new HashMap<>(); // send the list public Map<String, Boolean> getselected() {

我有一个JSF表,它使用Hashmap来存储选中的复选框。我的问题是:是否可以使用2D Java数组而不是Hashmap来存储密钥

编辑 我使用此代码存储选定的键。如何为
Map
重写此代码

private HashMap<String, Boolean> selected = new HashMap<>();

    // send the list
    public Map<String, Boolean> getselected() {
        return selected;
    }
private HashMap selected=new HashMap();
//发送列表
公共地图getselected(){
返回选中的;
}
我的想法是创建2D数组(它将用于映射),它将存储页面数量和页面上的列表。例如,100页x 10键

编辑2

我使用惰性加载创建了JSF表,该表从Oracle获取数据。JSF工作得很好,速度也很快。我面临的问题是,当我试图创建
selectall
复选框时,它会接受所有的kay并将键存储到
hashmap
中。稍后,这些键将用于SQL查询,以删除用户选择的行。 我创建了包含10000行的数据库表,并将它们显示到JSF表中。当我点击它们时,我用10000创建了
hashmap
。对于该尺寸,性能相对较好。我测试过删除它们——我创建了Java方法,该方法使用生成的
hashmap
并使用存储在
hashmap
中的键删除数据库行。这是展示,但可以做一些代码优化。 最大的问题是可伸缩性。我用1000000个键测试了
hashmap
——它可以工作,但速度非常慢。我需要设计JSF表来处理非常大的数据。 我认为解决方案是使用2D数组(本例中我们称之为2D数组)。我会这样解释我的想法: 例如,我将有一个包含100页的JSF表。每页将有10行。在标准的
hashmap
中,当我选择所有行时,我将有1000个键。
在2D数组解决方案中,我可以创建包含100个元素的数组,当我在页面之间切换时,我只有10行,这将由分页代码生成。当我选择所有数据库行时,我只能将visible rows键插入2D数组。我将数组中的其他位置替换为例如
1
,以便知道有什么。当我按下delete按钮时,Java代码将知道所有元素都被“虚拟”选中。有更好更简单的解决方案吗

A
Map
允许通过
put()
方法进行动态扩展,因此使用前无需准备,但数组不允许动态扩展,必须事先以固定大小手动准备

二维数组很难准备,如果技术上只需要一组一维数组,那么它就毫无意义。如果使用1D数组并将表的行索引用作数组索引,则更容易

例如


我在我的i3笔记本电脑上测试了它,它在20毫秒内完成了1000000个条目。您的性能问题可能应该在持久层中查找。

一个
Map
允许通过
put()
方法进行动态扩展,因此您不需要在使用前准备它,但是数组不允许动态扩展,必须事先以固定大小手动准备

二维数组很难准备,如果技术上只需要一组一维数组,那么它就毫无意义。如果使用1D数组并将表的行索引用作数组索引,则更容易

例如



我在我的i3笔记本电脑上测试了它,它在20毫秒内完成了1000000个条目。您的性能问题可能应该在持久性层中查找。

为什么不使用一个简单的arraylist来解决这个问题?(保持简单…)我想做一个惰性加载的实验。@Daniel你知道这可能吗?我从来没有试过。。。BalusC给了您一个很好的答案…在MO中,您最好只选择可见的行。。。而不是分页的另一页上的行。。。若用户想要删除表中的所有行,那个么最好提供额外的按钮“删除所有行”,为什么不使用一个简单的arraylist呢?(保持简单…)我想做一个惰性加载的实验。@Daniel你知道这可能吗?我从来没有试过。。。BalusC给了您一个很好的答案…在MO中,您最好只选择可见的行。。。而不是分页的另一页上的行。。。如果用户想删除表中的所有行,最好提供额外的按钮“删除所有行”,我更新了帖子。你能告诉我我的代码必须如何编辑吗。我不知道JSF是否能够在这种情况下与我的具体实现一起工作。您可以在这里找到一个具体的示例,说明如何正确使用
Map
:我建议从头开始。也许如果我告诉你一切,你可以告诉我什么是最好的解决方案。如果你还没有删除测试代码,你能告诉我用6个字符的字符串填充HashMap的内存是多少吗。也许我在想我的错误在哪里——当我点击“全选”时,我从数据库中得到一个包含键的列表,然后我将这些键放入带有TRUE标志的hashmap中。瓶颈是数据库查询。可能的解决方案是在bean使用过程中从数据库生成密钥到第二个线程。你能告诉我我的代码必须如何编辑吗。我不知道JSF是否能够在这种情况下与我的具体实现一起工作。您可以在这里找到一个具体的示例,说明如何正确使用
Map
:我建议从头开始。也许如果我告诉你一切,你可以告诉我什么是最好的解决方案。如果你还没有删除测试代码,你能告诉我用6个字符的字符串填充HashMap的内存是多少吗。也许我在想我的错误在哪里——当我点击“全选”时,我从数据库中得到一个包含键的列表,然后我将这些键放入带有TRUE标志的hashmap中。瓶颈是数据库查询。可能的解决方案是生成密钥
private List<Item> items;
private Boolean[] checked;

@EJB
private ItemService service;

@PostConstruct
public void init() {
    items = service.list();
    checked = new Boolean[items.size()];
}
Arrays.fill(checked, Boolean.TRUE);