Java 什么';创建集合或从列表中删除更快?
我已经有一个Java 什么';创建集合或从列表中删除更快?,java,list,set,Java,List,Set,我已经有一个列表,其中可能包含重复项,也可能不包含重复项。我将根据使用它们的一些计算结果来构建一个集,因为在某些情况下,两个不同的Ts可以生成相同的字符串 列表中的某些元素具有不需要的属性,因此我需要将它们过滤掉。我是这样过滤的: List<T> myList = myCoolListGetter(); Iterator<T> it = myList.iterator(); T curr; while (it.hasNext()) { curr = it.next
列表
,其中可能包含重复项,也可能不包含重复项。我将根据使用它们的一些计算结果来构建一个集,因为在某些情况下,两个不同的T
s可以生成相同的字符串
列表中的某些元素具有不需要的属性,因此我需要将它们过滤掉。我是这样过滤的:
List<T> myList = myCoolListGetter();
Iterator<T> it = myList.iterator();
T curr;
while (it.hasNext()) {
curr = it.next();
if (curr.shouldNotBeInResult()) {
myList.remove(curr);
}
}
List myList=mycollistGetter();
迭代器it=myList.Iterator();
T货币;
while(it.hasNext()){
curr=it.next();
如果(当前不应为结果()){
myList.remove(curr);
}
}
然后,我将这个列表
传递给另一个执行我提到的那些计算的方法,将它们添加到集合
我在想,也许我可以通过将结果中应该包含的元素插入集合
而不是从列表中删除它们来节省一些时间。既然我已经在这里迭代了列表
,而且以后还必须构建一个集
,那么这样做是否真的可以节省时间呢?可能吧。向哈希集中插入内容是O(1),因为哈希使复制检查非常快。因此,添加n个东西只会是O(n),这是一次浏览列表所需的时间。可能。向哈希集中插入内容是O(1),因为哈希使复制检查非常快。因此,添加n个东西只会是O(n),这是一次浏览列表所需的时间。可能。向哈希集中插入内容是O(1),因为哈希使复制检查非常快。因此,添加n个东西只会是O(n),这是一次浏览列表所需的时间。可能。向哈希集中插入内容是O(1),因为哈希使复制检查非常快。因此,添加n个东西只会是O(n),这是一次浏览列表所需的时间。IMO,如果您可以指定足够的初始容量,创建一个新的列表将比从现有的列表中删除更好。
(请参阅-,该构造函数允许您在构建时指定ArrayList
的容量)。因为这样您只需向其中添加元素,而无需重新调整容量。重新调整意味着创建新的备份数组并将现有元素复制到该新数组中
另一方面,从列表中删除需要将其余元素向左移动。此操作不需要移动元素的唯一时间是当要删除的元素是最后一个元素时
我说的原因是,一个新的列表
而不是集合
,是因为与集合不同,列表不需要关心添加的元素是否重复。IMO,如果可以指定足够的初始容量,创建一个新的列表
将比从现有的列表
中删除更好(请参阅-,该构造函数允许您在构建时指定ArrayList
的容量)。因为这样您只需向其中添加元素,而无需重新调整容量。重新调整意味着创建新的备份数组并将现有元素复制到该新数组中
另一方面,从列表中删除需要将其余元素向左移动。此操作不需要移动元素的唯一时间是当要删除的元素是最后一个元素时
我说的原因是,一个新的列表
而不是集合
,是因为与集合不同,列表不需要关心添加的元素是否重复。IMO,如果可以指定足够的初始容量,创建一个新的列表
将比从现有的列表
中删除更好(请参阅-,该构造函数允许您在构建时指定ArrayList
的容量)。因为这样您只需向其中添加元素,而无需重新调整容量。重新调整意味着创建新的备份数组并将现有元素复制到该新数组中
另一方面,从列表中删除需要将其余元素向左移动。此操作不需要移动元素的唯一时间是当要删除的元素是最后一个元素时
我说的原因是,一个新的列表
而不是集合
,是因为与集合不同,列表不需要关心添加的元素是否重复。IMO,如果可以指定足够的初始容量,创建一个新的列表
将比从现有的列表
中删除更好(请参阅-,该构造函数允许您在构建时指定ArrayList
的容量)。因为这样您只需向其中添加元素,而无需重新调整容量。重新调整意味着创建新的备份数组并将现有元素复制到该新数组中
另一方面,从列表中删除需要将其余元素向左移动。此操作不需要移动元素的唯一时间是当要删除的元素是最后一个元素时
我说的原因是,一个新的列表
而不是集合
,因为与集合不同,列表不需要关心添加的元素是否重复。考虑使用Google Guava的过滤器
和谓词
Collection<T> filtered = Collections2.filter(myCoolListGetter(),
new Predicate<T>() {
public boolean apply(T t) {
return !t.shouldNotBeInResult();
}
});
Collection filtered=Collections2.filter(myCollistGetter(),
新谓词(){
公共布尔应用(T){
返回!t.不应返回();
}
});
Iterable <T> filtered = Iterables.filter(myCoolListGetter(),
new Predicate<T>() {
public boolean apply(T t) {
return !t.shouldNotBeInResult();
}
});