小编K.M*_*K.M的帖子

Java对象的深度克隆(非bean)

我目前正在处理的项目有很多被序列化的对象,以便获得现有对象的深层副本.这可以正常工作,直到我们在运行时有多个调用,我们在组件之间有100个,200个甚至1000个调用,这就是我们遇到性能问题的地方.

复制这些克隆对象的历史原因是,在不同功能下处理相同对象的两个不同组件不应相互更改,例如,在按下保存或同步按钮之前,Swing UI中的更改不应更改后端中的对象值.

我们有相当大的代码库,我想如果我基于反射编写克隆,它将比序列化更快地工作,但是由于我们复杂的对象层次结构或由于某些其他原因,这种方法甚至更慢.

我也尝试过使用CloneUtils(sourceforge项目),它也比较慢(我们根本就没有使用Hibernate).Spring BeanUtils不是一个选项(我假设从文档中它只使用bean即内省,如果我使用它,如果使用非标准访问器暴露任何字段,我们将无法复制它们).

有任何想法,改善性能,同时仍然在不同的副本上工作.如果我们提供自己的复制方法而不是序列化,我们有一个选项可以加快速度,但是每次更新这些方法都有缺点,如果我们忘记了我们可能会松散功能.

java performance copy deep-copy cloning

8
推荐指数
1
解决办法
1154
查看次数

Java 集合包含所有奇怪的行为

我有以下代码,我在其中使用 superList 和 subList,我想检查 subList 实际上是 superList 的 subList。

我的对象没有实现 hashCode 或 equals 方法。我在测试中创造了类似的情况。当我运行测试时,结果显示 JDK 集合和普通集合的结果之间的性能差异非常大。运行测试后,我得到以下输出。

使用 Java Collection API 的时间流逝 8953 MilliSeconds & 结果为真 使用 Commons Collection API 的时间流逝 78 MilliSeconds & 结果为真

我的问题是为什么 java collection 在处理 containsAll 操作时如此缓慢。我在那里做错了吗?我无法控制从遗留代码中获得的集合类型。我知道如果我对 superList 使用 HashSet 那么我会使用 JDK containsAll 操作获得很大的性能提升,但不幸的是,这对我来说是不可能的。

package com.mycompany.tests;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;

import org.apache.commons.collections.CollectionUtils;
import org.junit.Before;
import org.junit.Test;

public class CollectionComparison_UnitTest {

    private Collection<MyClass> superList = new ArrayList<MyClass>();
    private Collection<MyClass> subList = new HashSet<MyClass>(50000);

    @Before
    public void …
Run Code Online (Sandbox Code Playgroud)

java collections list hashset

1
推荐指数
1
解决办法
3256
查看次数

标签 统计

java ×2

cloning ×1

collections ×1

copy ×1

deep-copy ×1

hashset ×1

list ×1

performance ×1