|
|
1
3
Java中的一个简单方法是创建一个实现两个包的包类。
这种方法将为读取操作提供“两全其美”的性能,但更新速度必然较慢。尤其是在给定位置插入并移除
(我注意到Linkedhashset不是一个直接的解决方案,因为它不提供
跟进
我找不到实现
但是,如果您正在创建一个
(例如,您可以将其编码为忽略
对于记录,自定义集合类不可原谅违反接口约定。事实上,即使是Java设计者也会这么做——见IdentityHashMap。不可原谅的是没有在javadocs中记录违反合同的行为。 |
|
|
2
1
如果可以使用不可变集合,请使用guava中的不可变集合,该集合具有aslist()视图以提供索引访问。 |
|
|
3
0
|
|
|
4
0
LinkedHashset类提供了ToArray方法,该方法应该适合您的需要。 |
|
|
5
0
您不会找到这样做的基本数据结构;您要寻找的目标排除了所有这些目标。您可能会发现一个更为深奥的方法可以做到这一点,但最简单的方法是使用复合数据结构,并行维护两个数据结构。
就是这样
这是一个简单的实现。它维护两个数据结构:一个列表,保留项目设置时的顺序;一个dict,用于按键快速查找。二者都保存值,二者都保存对方的键:dict在列表中保存索引,list在dict中保存键。这使得从对方引用每个数据结构很容易,因此它可以有效地处理赋值和迭代。
注意,这并不是实现每个操作,只是基本操作:dict样式的赋值
还要注意:对于dict样式和list样式的操作,这并不是使用相同的语法。这很混乱,很邪恶,迟早会把你咬得很厉害。这个不转
最后,它提供了简单的dict样式迭代,像dict一样生成键。执行一些事情,比如
|