我有ArrayList
Client
:
ArrayList<Client> clients = new ArrayList<>();
这些客户端显示在列表中,用户可以“选择”一个或多个客户端。这意味着可以选择或不选择每个客户端,并且不需要将此值存储在显示列表的屏幕之外。我想让这个用户选择使用它(比如在列表中设置一个复选框),但我想知道最好的方法是什么。我尝试了什么:
selected
添加布尔字段Client
。我不喜欢这个选项,因为选中的不是Client
的原始属性,而且它没有意义。Client
扩展为SelectableClient
,并添加布尔字段selected
。Map<boolean, Client>
结构,但我不确定此选项,因为我在arrayList中添加和删除客户端。这些选项中最有效和最容易实现的是什么?
答案 0 :(得分:3)
我建议您使用Set<Client>
(例如HashSet<Client>
)并将所选客户端添加到此集合中。
这可以避免向Client
添加一个实际上不属于该类的字段。
请注意,如果您使用的是JList
,则可以直接使用ListModel
/ ListSelectionModel
。 (您无需自己创建/维护用于保存所选客户端的数据结构。)
答案 1 :(得分:1)
将选定的布尔字段添加到类Client
正如您已经指出的那样,所选状态不是客户端的属性,而是用户的属性。如果您有多个用户,则一个用户可能选择了客户端,而另一个用户则没有。这就是选择应该保留在用户范围内的原因。
使用Set<Client>
,如同已经建议的那样,似乎是最好的数据结构,因为它避免了重复,因此可以使用remove()
安全地取消选择客户端。
将客户端扩展为SelectableClient
这种方法存在同样的问题,选择状态被建模为客户端的属性,而不是用户的属性。
答案 2 :(得分:0)
我建议你创建一个新的泛型类,如下所示:
Application
并创建此类型的数组或集合。这样,您只有一个额外的类,并且您可以稍后将其重用于其他用例