Java 为什么可以';我是否将一个值从一个XYSeriesCollection复制到另一个?

Java 为什么可以';我是否将一个值从一个XYSeriesCollection复制到另一个?,java,swing,time,histogram,jfreechart,Java,Swing,Time,Histogram,Jfreechart,我正在使用JFreeChart在JavaSwing中创建一个图像直方图。为了创建它,我迭代所有像素以获得所有颜色。根据大小和位深度,这需要一些时间 一旦我有了所有的数据,我就把它放入一个XYSeriesCollection变量中。为了能够显示和隐藏某些序列,我保存了该变量的副本 我的问题是,如果我这样做: final XYSeriesCollection data = createHistogram(); final XYSeriesCollection dataCopy = createHis

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

一旦我有了所有的数据,我就把它放入一个XYSeriesCollection变量中。为了能够显示和隐藏某些序列,我保存了该变量的副本

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

final XYSeriesCollection data = createHistogram();
final XYSeriesCollection dataCopy = createHistogram();
final XYSeriesCollection data = createHistogram();
final XYSeriesCollection dataCopy = data;
它可以毫无问题地工作,但效率不高,因为我必须迭代所有像素,这需要一段时间

如果我只是这样复制它:

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)
我认为这是因为当我从数据中删除序列时,它们是如何从dataCopy中删除的,但它们不应该完全不同吗?我只是使用以下方法:

data.removeAllseries();
data.addSeries(dataCopy.getSeries(index));
例如,如果我创建:

int x = 5;
int y = x;
x=0;
System.out.println(y)
输出仍然应该是5,我对x做了什么都不重要。我在做什么或假设那是错的


谢谢。

请注意两者之间的区别。您的示例,
dataCopy=data
,创建了一个副本。使用数据集的
clone()
方法制作副本:

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

代码:

控制台:

42.0
21.0
42.0

还考虑所示的方法,这可能会更快。

谢谢,很多,现在工作得很好。我一直在尝试按链接所说的那样绘制直方图,但一旦绘制完成,我就无法通过从数据采集中删除序列来显示单个R、G或B通道,因为HistorogramDataSet不包含删除序列的方法。因此,我决定自己编写所有内容,遍历所有像素,对于一张17Mpx的TIFF照片和macbook pro 2012中每种颜色16位的图片,13“大约需要4秒钟。@nck:与其更改模型,不如更改视图中系列的可见性;这是一个示例。