控制ArrayList的选定项

时间:2015-06-05 09:33:40

标签: java arraylist

我有ArrayList Client

ArrayList<Client> clients = new ArrayList<>();

这些客户端显示在列表中,用户可以“选择”一个或多个客户端。这意味着可以选择或不选择每个客户端,并且不需要将此值存储在显示列表的屏幕之外。我想让这个用户选择使用它(比如在列表中设置一个复选框),但我想知道最好的方法是什么。我尝试了什么:

  • 向班级selected添加布尔字段Client。我不喜欢这个选项,因为选中的不是Client的原始属性,而且它没有意义。
  • Client扩展为SelectableClient,并添加布尔字段selected
  • 拥有一个控制所选状态的辅助数组(或ArrayList,或其他)。
  • 使用Map<boolean, Client>结构,但我不确定此选项,因为我在arrayList中添加和删除客户端。

这些选项中最有效和最容易实现的是什么?

3 个答案:

答案 0 :(得分:3)

我建议您使用Set<Client>(例如HashSet<Client>)并将所选客户端添加到此集合中。

这可以避免向Client添加一个实际上不属于该类的字段。

请注意,如果您使用的是JList,则可以直接使用ListModel / ListSelectionModel。 (您无需自己创建/维护用于保存所选客户端的数据结构。)

答案 1 :(得分:1)

  

将选定的布尔字段添加到类Client

正如您已经指出的那样,所选状态不是客户端的属性,而是用户的属性。如果您有多个用户,则一个用户可能选择了客户端,而另一个用户则没有。这就是选择应该保留在用户范围内的原因。

使用Set<Client>,如同已经建议的那样,似乎是最好的数据结构,因为它避免了重复,因此可以使用remove()安全地取消选择客户端。

  

将客户端扩展为SelectableClient

这种方法存在同样的问题,选择状态被建模为客户端的属性,而不是用户的属性。

答案 2 :(得分:0)

我建议你创建一个新的泛型类,如下所示:

Application

并创建此类型的数组或集合。这样,您只有一个额外的类,并且您可以稍后将其重用于其他用例