gpt4 book ai didi

java - 为什么我无法将一个值从一个 XYSeriesCollection 复制到另一个 XYSeriesCollection?

转载 作者:行者123 更新时间:2023-11-30 07:03:27 26 4
gpt4 key购买 nike

我正在使用 JFreeChart 在 java swing 中创建图像直方图。为了创建它,我迭代所有像素以获取所有颜色。根据大小和位深度,这需要一些时间。

获得所有数据后,我将其放入 XYSeriesCollection 变量中。为了能够在后面显示和隐藏某些系列,我保存了该变量的副本。

我的问题是,如果我这样做:

final XYSeriesCollection data = createHistogram();
final XYSeriesCollection dataCopy = createHistogram();

它的工作没有任何问题,但效率不高,因为我必须迭代所有像素,这需要一段时间。

如果我像这样复制它:

final XYSeriesCollection data = createHistogram();
final XYSeriesCollection dataCopy = data;

当我执行代码时,出现此异常:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Series index out of bounds
at org.jfree.data.xy.XYSeriesCollection.getSeries(XYSeriesCollection.java:263)

我认为这是因为当我从数据中删除该系列时,它们也会从数据复制中删除,但这些不应该完全不同吗?我只是使用这种方法:

data.removeAllseries();
data.addSeries(dataCopy.getSeries(index));

例如,如果我创建:

int x = 5;
int y = x;
x=0;
System.out.println(y)

输出应该仍然是 5,并且我对 x 做了什么并不重要。我在做什么或认为这是错误的?

谢谢。

最佳答案

请注意 shallow versus deep copy 之间的区别。您的示例 dataCopy = data 生成 shallow复制。使用数据集的 clone() 方法创建 deep复制:

XYSeriesCollection dataCopy = (XYSeriesCollection) data.clone();

您可以看到clone()是如何实现的here 。下面的片段创建了一个系列,克隆它,并更新原始片段以说明效果。

代码:

XYSeriesCollection data = new XYSeriesCollection();
XYSeries series = new XYSeries("Test");
data.addSeries(series);
series.add(1, 42);
System.out.println(data.getSeries(0).getY(0));
XYSeriesCollection dataCopy = (XYSeriesCollection) data.clone();
series.updateByIndex(0, 21.0);
System.out.println(data.getSeries(0).getY(0));
System.out.println(dataCopy.getSeries(0).getY(0));

控制台:

42.0
21.0
42.0

另请考虑所示的方法 here ,这可能会更快。

关于java - 为什么我无法将一个值从一个 XYSeriesCollection 复制到另一个 XYSeriesCollection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40506365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com