在Java中有没有一种简单的方法来"包含"?

12 浏览
0 Comments

在Java中有没有一种简单的方法来"包含"?

当某事在逻辑上看起来非常简单时,结果却变得非常复杂。

我并没有太多使用Java的经验,所以请原谅我的无知。我想做的是:

我有一个很好的、清晰的算法在一个.java文件中,我希望从一个初始化的数组中输入它。这个数组包含了超过40,000个元素,所以我希望它独立存在于一个单独的文件中。我该如何做呢?难道没有一种快速的方法只需说“{在这里插入filename.txt的内容}”吗?

0
0 Comments

在Java中,代码的基本单元是类,而不是文件。导入文件根本就没有意义,这是错误的抽象级别。停止考虑文件,而是考虑不同类中的代码以及如何调用该代码。类定义所在的文件(甚至可以不是文件!)并不重要。

顺便说一下,如果直接在代码中定义40,000个元素,可能会遇到方法大小的限制。最好将数据放入文本文件中并进行解析。这样,当您更改数据时,也不必重新编译任何内容。

解析文件的替代方法是先计算数据,然后将其放入适当的Java数据结构(数组、列表、映射等),最后使用ObjectOutputStream将其序列化到文件中。请注意,如果数据存储在以后更改其签名的类中,这将会引起问题。

有趣,它就像*nix哲学的对立面。数组大小约为140K。这是否会导致问题?这是从1到550,000的质数间隔列表,所以希望它永远不会改变。

方法的大小限制为64K,其中包括指令,所以是的,这太大了。你可以将它分成几个方法,但仍然很丑陋。数据可能不会改变,但您可能仍然想要扩展它。

我喜欢序列化的想法,但在这个应用程序中不适用。数组的起始点取决于用户想要分解的数字,然后从那里可以根据数字在两个方向上遍历数组,然后在两个方向上不断遍历(数据集是对称的,所以我丢弃了一半),直到找到因子。序列化文件的大小可能为sqrt(2^64)。我得到了下面100k以下的数据集,但对于我的Java版本,我创建了一个新的数据集,没有使用数字17。现在它只有6k。

我真的不明白为什么你认为序列化行不通。你正在内存中创建数据结构-写入到磁盘中的确切数据结构会有什么问题?

我的想法是:1)序列化对于每个程序运行都是定制的,2)序列化非常大,3)磁盘缓存速度慢。然而,我想我误解了你的真正意思。我现在认为你是在谈论将整个文件一次性读入内存(每次程序运行一次),这将产生与您最初的通过代码初始化的计划相同的结果,并且可能会稍微更快一些。

0
0 Comments

在Java中,有几种方法可以实现导入(import)功能,具体取决于你想要导入什么类型的内容以及你想要如何更新它。

对于问题的解决方法,可以将算法方法设为静态(static)。这样你就可以通过以下方式调用它:Object whateverItReturns = NameOfClass.nameOfStaticMethod(args);

感谢回答。我的需求非常基础,我只需要一个简单且有效的方法。我只是为了自己编写代码。

对于在Java中实现导入功能的简单方法,可以将算法方法设为静态。这样可以通过类名和静态方法名调用该方法。这种方法简单且易于实现,对于个人编写代码而言非常实用。

0
0 Comments

Java中没有直接包含(include)其他文件的功能,这导致在不同的Java文件之间共享变量或方法时需要特殊处理。上面的代码示例中,File2.java需要使用File1.java中定义的bigArray数组。

解决方法之一是将bigArray声明为public static,这样在其他文件中可以直接访问该数组。但这样做会导致不严谨的编程实践,因为其他文件可以直接修改bigArray数组,违背了封装性原则。

另一种解决方法是使用static import关键字。通过在File2.java文件中添加import static File1.bigArray;语句,我们可以直接使用bigArray数组,而无需在使用时添加File1前缀。

通过使用static import,我们可以更方便地使用其他文件中的静态成员,避免了繁琐的前缀添加。但需要注意的是,过度使用static import可能会导致代码可读性下降,因此仍需谨慎使用。

0