Tag: 集合

为什么ReadOnlyObservableCollection.CollectionChanged不公开?

为什么ReadOnlyObservableCollection.CollectionChanged受保护而不公开(如相应的ObservableCollection.CollectionChanged )? 如果我无法访问CollectionChanged事件,那么实现INotifyCollectionChanged的集合的用法是什么?

.NET中的线程安全集合

现在什么时候需要一个线程安全的收集标准(例如设置)。 我是否自己同步,还是有一个固有的线程安全集合?

为什么存在WeakHashMap,但缺lessWeakSet?

从J.布洛赫 一个…内存泄漏的来源是侦听器…确保callback是垃圾回收的最好方法是只存储对它们的弱引用,例如,只将它们作为键存储在WeakHashMap中 。 那么,为什么Java Collections框架中没有任何WeakSet呢?

为什么Collections.sort使用合并sorting而不是快速sorting?

我们知道快速sorting是最好的sortingalgorithm。 collections.sort使用合并sortingalgorithm而不是快速sorting。 但是Arrays.sort使用快速sorting。 Collections.sort使用合并sorting而不是快速sorting的原因是什么?

我如何使我的ArrayList线程安全? 在Java中的另一个问题的方法?

我有一个ArrayList,我想用它来保存完成执行后立即扩展Thread类的RaceCar对象。 一个名为Race的类使用RaceCar对象在完成执行时调用的callback方法来处理这个ArrayList。 callback方法addFinisher(RaceCar finisher)将RaceCar对象添加到ArrayList。 这应该给出线程完成执行的顺序。 我知道ArrayList不同步,因此不是线程安全的。 我尝试使用Collections.synchronizedCollection(c Collection)方法,方法是传入一个新的ArrayList,并将返回的Collection分配给一个ArrayList。 但是,这给了我一个编译器错误: Race.java:41: incompatible types found : java.util.Collection required: java.util.ArrayList finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars)); 这是相关的代码: public class Race implements RaceListener { private Thread[] racers; private ArrayList finishingOrder; //Make an ArrayList to hold RaceCar objects to determine winners finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars)); //Fill array with RaceCar objects for(int i=0; […]

ArrayList的ConcurrentModificationException

我有以下一段代码: private String toString(List<DrugStrength> aDrugStrengthList) { StringBuilder str = new StringBuilder(); for (DrugStrength aDrugStrength : aDrugStrengthList) { if (!aDrugStrength.isValidDrugDescription()) { aDrugStrengthList.remove(aDrugStrength); } } str.append(aDrugStrengthList); if (str.indexOf("]") != -1) { str.insert(str.lastIndexOf("]"), "\n " ); } return str.toString(); } 当我尝试运行它,我得到ConcurrentModificationException ,任何人都可以解释为什么会发生,即使代码运行在同一个线程? 我怎么能避免它?

从集合中移除项目的最佳方法

一旦知道了项目,而不是它的索引,什么是最好的方式来处理从C#中的集合中删除项目。 这是做到这一点的一种方式,但似乎最好不过瘾。 //Remove the existing role assignment for the user. int cnt = 0; int assToDelete = 0; foreach (SPRoleAssignment spAssignment in workspace.RoleAssignments) { if (spAssignment.Member.Name == shortName) { assToDelete = cnt; } cnt++; } workspace.RoleAssignments.Remove(assToDelete); 我真正想要做的是find要删除的属性(在这种情况下,名称)没有循环通过整个集合,并使用2个额外的variables。

将TreeSetsorting为对象更改值

我有一个使用Comparable <>定义“自然sorting顺序”的对象。 这些被存储在TreeSets中。 除了删除和重新添加对象之外,是否还有另一种方法来更新用于定义sorting顺序的成员更新的sorting?

StringDictionary vs Dictionary <string,string>

有没有人有任何想法之间的System.Collections.Specialized.StringDictionary对象和System.Collections.Generic.Dictionary的实际区别? 我过去都用过,没有太多的考虑,哪个更好,Linq更好,还是提供其他好处。 任何想法或build议,为什么我应该使用一个在另一个?

访问项目在一个ordereddict

比方说,我有以下代码: import collections d = collections.OrderedDict() d['foo'] = 'python' d['bar'] = 'spam' 有没有办法以编号的方式访问项目,如: d(0) #foo's Output d(1) #bar's Output