java中集合的索引,java模式以保持集合中数据的索引一致

假设我有一个List< Person>所有数据结构,其中Person定义为:

class Person {

String firstName;

String secondName;

boolean hasValidDrivingLicense;

}

我想保留一个冗余的List< Person>仅包含拥有有效驾驶执照的人的驾驶员.我认为它也可以被视为一个索引(一个索引将包含所有项目,但目的非常相似).

这是为了避免每次需要这些数据时都需要遍历整个列表.

(每次循环都有一个优势,即我拥有hasValidDrivingLicense信息的单权威表示;放弃这条道路需要:a)有效理由b)经过测试的替代方案.原因取决于具体问题;替代方案是我在这里开发的:-))

问题

我可能有这样的事情:

void add(Person p) {

all.add(p);

if (p.hasValidDrivingLicense()) {

drivers.add(p);

}

}

这通常有效.

Person p = new Person(); //then set fields, of course.

add(p);

p.setHasValidDrivingLicense(true);

在这里它没有.

所以问题是:冗余信息可能不对齐.指数可能“破裂”.

解决方案

> Person的hasValidDrivingLicense属性实现Observable设计模式(或发布 – 订阅者,在swing中基于Listener接口)

如果对象可以更改,并且我希望我的索引与其更改保持同步,我需要一种方法来通知索引管理器对象已更改相关属性. Observable似乎是一个明确的解决方案.没有问题.

>人是不可改变的

问题

不可变性似乎是一个可行的解决方案,但从集合维护者的角度来看,那就是编写代码的人:

public void add(Person p) {

...

}

必须确保p是不可变的或更好的,至少hasValidDrivingLicense是最终的.

a)这可以通过反思来完成(https://stackoverflow.com/questions/203475/how-do-i-identify-immutable-objects-in-java)

但这不需要进行新的绩效评估吗?反思是否需要付出代价?

b)是否存在设计模式或语言的新特征(例如注释)这个问题的其他解决方案?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值