java - 确保在Java中保留List中的顺序并提高效率

标签 java image

我正在用 Java 创建照片马赛克。它的输入是目标图像和图 block 集合。下面是我的算法:

a. Read all the tiles from the directory and process* it. [Every tile is of the same dimension.]
b. Read the target image, break it into cells [cells are of dimensions of a tile.]
c. Process* all the cells.
d. For each cell:
  d.1. Create a HashMap h [where key=euclidean metric, value=corresponding tile]
  d.2. For each tile:
    d.2.1 Calculate Euclidean metric.
    d.2.2 add it to h.
  d.3 Calculate min from h.
  d.4 Add the min to an outputList
e. Create the image from list of images in the outputList.

*process 方法接收图像并创建我们定义的名为 ImageDetails 的类的对象。因此,对于处理的每个图 block 和单元格,都会创建一个 ImageDetails 对象,该对象存储其 RGB 值和尺寸等详细信息。有 2 个单独的对象列表:一个用于 tiles,另一个用于 cells

问题是平均大约有 300 个图 block 和多达 50,000 个单元格(也可能更多!)。所以当我的程序运行时,它在内存中有这么多对象,除了它执行的计算和其他 ip/op 操作。

当我在资源较少(可用内存较少)的机器上运行此程序时,创建的输出图像会失真。但是当我在有更多可用资源的机器上运行它时,它是完美的。我认为这是因为当没有可用资源时,它无法一次将所有对象保存在内存中。所以我看到了一张错放了瓷砖的图像。但是当它有足够的内存时,我会看到完美的输出图像。

我该怎么做才能确保无论可用内存如何,我都可以保留添加到 outputList 中的元素的顺序,以便我可以看到没有失真的图像。

谢谢。

编辑:

下面是同一程序输出的 2 个图像。唯一的区别是它们在不同的机器上运行。请帮助我理解给定算法和约束的程序输出的差异。

enter image description here

enter image description here

最佳答案

它可能与内存没有任何直接关系 - 要么你有足够的,要么你没有。

您为 outputList 使用什么集合类? ArrayList和LinkedList都应该保证元素的顺序。

关于java - 确保在Java中保留List中的顺序并提高效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13096380/

相关文章:

java - 查看寻呼机设置当前项目不能正常工作

java - Eclipse:设置自动格式化的最大行长对吗?

java - java中的默认类加载器是将所有内容都保存在内存中还是留在文件系统中?

css - 如何在悬停时更改背景图像?

递归方法中的 java.lang.StackOverflowError

html - css 和 html - 为什么左浮动的 div 放在下面的行上?

html - 创建并排图像时出现问题(纯 HTML/CSS)

android - ImageView 上的随机图像

image - 将图像绑定(bind)到 URL Xamarin 表单 XAML

java - 如果 URL 中提供了某些参数,如何仅显示页面?