Tag: 数据结构

如何在计算过程中存储数百万的Double?

我的引擎正在对X交易执行1,000,000次模拟。 在每次模拟期间,对于每笔交易,可以validation特定条件。 在这种情况下,我将值(它是一个double )存储到一个数组中。 每笔交易都有自己的价值清单(即这些价值从一笔交易到另一笔交易都是独立的)。 在所有模拟结束时,对于每笔交易,我在他的List上运行一个算法来获得一些输出。 不幸的是,这个算法需要这些值的完整列表,因此,我无法修改我的算法来“即时”计算输出,即在模拟期间。 在“正常”条件下(即X为低,并且validation条件的时间少于10%),计算结束正确,即使可以增强。 当我有很多交易(例如X = 30 )并且我的几乎所有模拟都validation了我的特定条件(比如90%的模拟)时,我的问题就出现了。 所以只是为了存储值,我需要大约900,000 * 30 * 64bits 64位的内存(大约216Mb)。 我未来的要求之一是能够运行5,000,000次模拟…… 所以我无法继续目前存储值的方式。 目前,我使用了Map<String, List>的“简单”结构,其中键是元素的ID, List是值列表。 所以我的问题是如何增强我的应用程序的这个特定部分,以减少模拟过程中的内存使用量? 另外一个重要的注意事项是,对于最终的计算,我必须订购我的List (或我将使用的任何结构)。 因此,如果前一个问题的解决方案还提供了一个对新插入元素进行排序的结构(例如SortedMap ),那将非常棒! 我使用的是Java 1.6。 编辑1 我的引擎确实正在执行一些财务计算,在我的情况下,所有交易都是相关的。 这意味着我无法在第一笔交易中运行计算,获取输出,清理List ,然后转到第二笔交易,依此类推。 当然,作为临时解决方案,我们会增加分配给引擎的内存,但这不是我期望的解决方案;) 编辑2 关于算法本身。 我不能在这里给出确切的算法,但这里有一些提示: 我们必须处理已排序的List 。 然后我将计算一个索引(根据给定的参数和List本身的大小计算)。 然后,我最终返回此List的index-th值。 public static double algo(double input, List sortedList) { if (someSpecificCases) { return 0; […]

具有双向O(1)查找的数据结构。 哈希表?

我正在实施一个系统,我有一个名单列表,每个人都有1个电话号码。 我需要能够取一个名字并查找电话号码,或者拿一个电话号码并查找姓名。 我知道我可以通过两个哈希表来实现这一点 – 一个从名称到电话号码,一个从电话号码到名字。 然后我可以在O(1)时间向任意方向查找。 然而,这似乎是我存储了太多数据 – 每个名称和每个电话号码都存储了两次。 有没有办法更有效地做到这一点? 我应该使用什么数据结构来存储姓名和电话号码? 如果相关,我用Java编码。 非常感谢!

从java使用scala.collection.immutable.Set的示例

那些熟悉Scala的人是否知道如何使用Java中的scala.collection.immutable.Set ? 我可以模糊地阅读scaladoc,但我不确定如何从java调用scala方法如“ – ”(我假设我只需要在我的类路径中包含一些scala .jar文件……?)

列出使用double 的RAM的?

Java专家强调避免过早优化的重要性,而是专注于清洁OO设计。 我试图在重写使用大量长元素(几百万)的程序的上下文中调和这个原则。 看起来使用ArrayList会占用long的原始数组的大约3倍的内存,并且浪费那么多RAM似乎是我的合理关注。 我的基础是我使用此处描述的 MemoryTestBench类进行的实验。 我的测试和输出如下: package memory; import java.util.ArrayList; import java.util.List; public class ArrayListExperiment { public static void main(String[] args) { ObjectFactory arrayList = new ObjectFactory() { public Object makeObject() { List temp = new ArrayList(1000); for (long i=0; i<1000; i++) temp.add(i); return temp; } }; ObjectFactory primitiveArray = new ObjectFactory() { public Object […]

在java中表示树层次结构

可能重复: Java树数据结构? 我想在java中表示层次结构。 层次结构可以是forms Key | |-Value1 | |-Value11 | |-Value111 |-Value2 | |-Value22 |-Value3 |-Value4 任何人都可以建议我在java中表示这种层次结构的最佳数据结构吗?

Java关键字搜索对象的最佳数据结构是什么

假设我有一个“期刊文章”类,其中包含年份,作者,标题,期刊名称,关键字等变量。 诸如authors和keywords之类的变量可能被声明为String [] authors和String []关键字 通过一个或多个“关键字”,或几个作者姓名中的一个或标题的一部分,在“期刊论文”的一组对象中搜索的最佳数据结构是什么? 谢谢! ================================================== ========================在大家的帮助下,通过Processing环境实现的测试代码如下所示。 建议非常感谢! 谢谢! ArrayList papers = new ArrayList(); HashMap<String, ArrayList> hm = new HashMap<String, ArrayList>(); void setup(){ Paper paperA = new Paper(); paperA.title = “paperA”; paperA.keywords.append(“cat”); paperA.keywords.append(“dog”); paperA.keywords.append(“egg”); //println(paperA.keywords); papers.add(paperA); Paper paperC = new Paper(); paperC.title = “paperC”; paperC.keywords.append(“egg”); paperC.keywords.append(“cat”); //println(paperC.keywords); papers.add(paperC); Paper paperB = new Paper(); […]

如何在JavaFx中创建通用TableView?

我正在为我的项目构建一个GUI,我需要显示来自各种类型的数据结构的信息:表中的ArrayList,HashMap,TreeSet。 基本上我需要显示我在视图包中的模型包中获得的查询方法的信息。 我的实现现在包括一个控制器,用于我每次声明TableView时使用指定的对象类型构建的每个表。 我想知道是否有一种方法来创建一个类,它的构造函数将构建我需要的表(具有此对象所需的列数)。 某种通用表构建器,可以读取对象并找出需要表示的列数。 例如:提供具有4个字段/列的Reservation对象与具有6个字段/列的Member对象进行比较。 根据它将得到的数据结构。 因此,我将能够创建此类的实例并实例化我需要的表并在屏幕上显示它。 我还需要一种能够从场景构建器控制它的方法,因为这是我用于以图形方式构建GUI的主要工具。 我在这里添加了一个表格代码,希望有人可以帮我完成这个繁琐的任务:) package view; import java.util.ArrayList; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.TextField; import javafx.stage.Stage; import model.Reservation; public class QRYClientReservationsTableController { private ObservableList ReservationsData = FXCollections.observableArrayList(); @FXML private TableView ReservationforClient; @FXML private TableColumn ReservationIdColumn; @FXML private TableColumn LocationIdColumn; […]

初始化HashMap的最佳方法

我通常会这样做 HashMap dictionary = new HashMap(); 我开始考虑它,据我所知, HashMap是通过哈希表实现的。 使用散列将对象存储在表中,以查找它们应存储在表中的位置。 我没有在dictionary构造上设置大小这一事实是否会降低性能? 即建设期间哈希表的大小是多少? 当元素增加时,是否需要为表分配新内存? 或者我对这里的概念感到困惑? 默认容量和负载是否足够,或者我应该花时间查看实际数字?

如何在一次迭代中走到奇异链表的中间?

最近我被问到一个问题,在一个单独的链表中,我们如何在一次迭代中进入列表的中间位置。 A –> B –> C –> D (even nodes) 为此,它应该返回指向B的地址 A –> B –> C (odd nodes) 对此,它也应该返回指向B的地址 有一个解决方案,两个指针一个移动一次,其他移动两次,但它似乎没有在这里工作 LinkedList p1,p2; while(p2.next != null) { p1 = p1.next; p2 = p2.next.next; } System.out.print(“middle of the node” + p1.data); //This does not give accurate result in odd and even 如果有人之前做过这个,请帮忙。

HashSet 的初始容量

我应该为HashSet使用什么初始容量,我知道我将插入1000个整数以防止需要进行任何内部重建? 起初我虽然我应该使用1000但是阅读Constructs a new, empty set; the backing HashMap instance has the specified initial capacity and default load factor (0.75). initialCapacity参数的构造函数的描述,它表示Constructs a new, empty set; the backing HashMap instance has the specified initial capacity and default load factor (0.75). Constructs a new, empty set; the backing HashMap instance has the specified initial capacity and default […]