从java列表中删除和添加元素的最佳方法

从java列表中删除和添加元素的最佳方法,java,Java,我的列表中有100000个对象。我想根据条件从列表中删除一些元素。有人能告诉我实现内存和性能交互的最佳方法吗 同样的问题也适用于基于条件添加对象 提前谢谢 Raju(from)基于谓词生成过滤的集合 List<Number> myNumbers = Arrays.asList(Integer.valueOf(1), Double.valueOf(1e6)); Collection<Number> bigNumbers = Collections2.filter(

我的列表中有100000个对象。我想根据条件从列表中删除一些元素。有人能告诉我实现内存和性能交互的最佳方法吗

同样的问题也适用于基于条件添加对象

提前谢谢 Raju

(from)基于谓词生成过滤的集合

List<Number> myNumbers = Arrays.asList(Integer.valueOf(1), Double.valueOf(1e6));
Collection<Number> bigNumbers = Collections2.filter(
    myNumbers, 
    new Predicate<Number>() {
      public boolean apply(Number n) {
        return n.doubleValue() >= 100d;
      }
    });
List myNumbers=Arrays.asList(Integer.valueOf(1),Double.valueOf(1e6));
Collection bigNumbers=Collections2.filter(
我的号码,
新谓词(){
公共布尔应用(数字n){
返回n.doubleValue()>=100d;
}
});
请注意,一些操作,如
size()。如果您倾向于遵循Josh Bloch的建议,并且更喜欢
isEmpty()
和迭代器,而不喜欢不必要的
size()
检查,那么这在实践中应该不会对您造成影响。

(from)基于谓词生成过滤的集合

List<Number> myNumbers = Arrays.asList(Integer.valueOf(1), Double.valueOf(1e6));
Collection<Number> bigNumbers = Collections2.filter(
    myNumbers, 
    new Predicate<Number>() {
      public boolean apply(Number n) {
        return n.doubleValue() >= 100d;
      }
    });
List myNumbers=Arrays.asList(Integer.valueOf(1),Double.valueOf(1e6));
Collection bigNumbers=Collections2.filter(
我的号码,
新谓词(){
公共布尔应用(数字n){
返回n.doubleValue()>=100d;
}
});

请注意,一些操作,如
size()。如果您倾向于遵循Josh Bloch的建议,宁愿使用
isEmpty()
和迭代器,而不是不必要的
size()
检查,那么这在实践中不会对您造成影响。

如果您要迭代列表并对每个元素应用测试,那么
链接列表将在CPU时间方面最有效,因为您不必移动列表中的任何元素。但是,它将比
ArrayList
消耗更多内存,因为每个列表元素实际上都保存在一个条目中

然而,这可能并不重要。100000是一个小数字,如果您不删除很多元素,那么移动
ArrayList
的成本将很低。如果要删除很多元素,最好使用过滤器将其重组为副本


然而,唯一真正知道的方法是编写代码并对其进行基准测试。

如果要迭代列表并对每个元素应用测试,那么就CPU时间而言,
LinkedList
将是最有效的,因为您不必移动列表中的任何元素。但是,它将比
ArrayList
消耗更多内存,因为每个列表元素实际上都保存在一个条目中

然而,这可能并不重要。100000是一个小数字,如果您不删除很多元素,那么移动
ArrayList
的成本将很低。如果要删除很多元素,最好使用过滤器将其重组为副本


然而,唯一真正知道的方法是编写代码并对其进行基准测试。

您的容器不仅仅是一个
列表<代码>列表
是一个接口,可以通过实现,例如
ArrayList
LinkedList
。性能将取决于这些底层类中的哪一个实际上是为多态性地称为
List
的对象实例化的

<>代码> ARARYList可以快速访问列表中间的元素,但是如果删除其中一个元素,则需要转换一组元素。code>LinkedList与此相反,需要迭代访问,但删除只是重新分配指针的问题


您的性能取决于
列表的实现,而实现的最佳选择取决于您将如何使用列表以及哪些操作最频繁。

您的容器不仅仅是一个
列表<代码>列表
是一个接口,可以通过实现,例如
ArrayList
LinkedList
。性能将取决于这些底层类中的哪一个实际上是为多态性地称为
List
的对象实例化的

<>代码> ARARYList可以快速访问列表中间的元素,但是如果删除其中一个元素,则需要转换一组元素。code>LinkedList与此相反,需要迭代访问,但删除只是重新分配指针的问题


您的性能取决于
列表的实现,而实现的最佳选择取决于您将如何使用列表以及哪些操作最频繁。

LinkedList可能是一个不错的选择


LinkedList比ArrayList“删除和添加元素”更有效。并且无需调用
ArrayList.trimToSize()等方法来删除无用的内存。但是LinkedList是一个双链接列表,每个元素都被包装成一个需要额外内存的条目。

LinkedList可能是一个不错的选择


LinkedList比ArrayList“删除和添加元素”更有效。并且无需调用
ArrayList.trimToSize()等方法来删除无用的内存。但是LinkedList是一个双链接列表,每个元素都被包装成一个需要额外内存的条目。

我们可能需要更多的信息来支持您。10万=10万(根据Wikipedia)列表是否已排序?它是否可以包含重复项?您好,是的,java.util.ArrayList中有100000个对象。此列表不包含重复项。我想根据条件从现有源列表中删除或添加对象。我们可能需要更多信息来支持您。1 lakh=100000(根据Wikipedia)列表是否已排序?它是否可以包含重复项?您好,是的,java.util.ArrayList中有100000个对象。此列表不包含重复项。我想根据条件从现有源列表中删除或添加对象。挑剔:
Collections2。筛选
生成另一个colle的筛选视图