- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我正在使用 JFreeChart 在 java swing 中创建图像直方图。为了创建它,我迭代所有像素以获取所有颜色。根据大小和位深度,这需要一些时间。 获得所有数据后,我将其放入 XYSeries
背景信息 我想创建一个准动态数据集,其中包含几个不同的数据系列,这些数据系列在一定程度上共享相同的时间范围。由于我永远不知道何时需要新系列或更新旧系列,因此我正在制作一种方法,该方法采用通用条目作为名
我有一个 XY 图表,我想在其中表示某些日期的 X 值。数据集的创建很简单: XYSeries serie = new XYSeries("valor"); for(int i=0;i
我是一名优秀的程序员,十分优秀!