Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';创建集合或从列表中删除更快?_Java_List_Set - Fatal编程技术网

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();
      }
    });