Tag: 迭代

如何添加一个function,我可以在我的生命游戏程序中获得这一代?

我试图让我的程序显示(在控制台中首先测试)在单元格改变其forms的每一步的计数。 因此,计数应该从0开始,并在每次单元格改变其forms时递增。 我试过这个,使用count ++然而它不会增加1,而是给我随机数。 任何帮助都感激不尽。 import java.awt.Color; import java.util.Timer; import java.util.TimerTask; import java.awt.Image; import java.awt.Graphics; import javax.swing.SwingUtilities; public class GameOfLife extends javax.swing.JFrame { final int wid = 100, hei = 50; public static int count; boolean[][] currentMove = new boolean[hei][wid], nextMove = new boolean[hei][wid]; boolean play; Image offScrImg; Graphics offScrGraph; public GameOfLife() { initComponents(); offScrImg […]

如何在Java 8中创建漂亮的迭代

受Adam Bien的博客启发,我想用Java 8将Java 7中的常见迭代替换为更好的迭代。旧代码看起来像这样: void repeatUsingJava7(int times) { for (int i = 0; i < times; i++) { doStuff(); doMoreStuff(); doEvenMoreStuff(); } } ……这不太好。 所以我用Adam Bein的例子替换了它: void repeatUsingJava8(int times) { IntStream.range(0, times).forEach( i -> { doStuff(); doMoreStuff(); doEvenMoreStuff(); } ); } …这是向正确方向迈出的一步,但不会使代码更易于阅读,还会引入一个不需要的变量i ,以及一对额外的花括号。 所以现在我想知道是否有其他方法来编写这个代码,这将使它更好,更容易阅读,主要是使用Java 8。

使用Java,如何在不重复比较的情况下将HashMap中的每个条目与同一HashMap中的每个其他条目进行比较?

我目前正在使用2 for循环来比较所有条目,但我得到重复的比较。 由于HashMaps没有订购,我无法弄清楚如何消除已经进行的比较。 例如,我有类似的东西: for(Entry e1: map.entrySet()) { for(Entry e2: map.entrySet()) { if (e1.getKey() != e2.getKey()) { //compare e1.getValue() to e2.getValue() } } } 这个问题是第一个条目将与第二个条目进行比较,然后与第三个条目进行比较,依此类推。 但是第二个条目将再次与第一个条目进行比较,依此类推。 然后将第三个条目与第一个条目进行比较,然后是第二个条目,然后是第四个条目,等等。是否有更好的方法来迭代HashMaps以避免进行重复比较? 附加信息: 为了更具体,希望能回答你的问题,我所拥有的HashMap是存储文件名(密钥)和文件内容(值) – 只是文本文件。 通过遍历包含我想要比较的文件的目录来填充HashMap。 然后,我正在做的是通过一些算法运行成对的文件,以确定每对文件之间的相似性。 我不需要将文件1与文件2进行比较,然后再将文件2与文件1进行比较,因为我只需要比较2个文件一次。 但我确实需要将每个文件与其他文件进行一次比较。 我是使用HashMaps的新手。 agim在下面的回答可能只适用于我的目的。 但我也会尝试围绕着下面的Evgeniy Dorofeev和Peter Lawrey的解决方案。 我希望这有助于更好地解释事情。

如何使用Java从Hadoop读取偏移量的文件

问题:我想从HDFS读取文件的一部分并将其返回,例如1000行的文件中的行101-120。 我不想使用seek因为我读过它很贵。 我有日志文件,我正在使用PIG处理成有意义的数据集。 我一直在编写一个API来返回数据以供前端消费和显示。 那些经过处理的数据集可以足够大,我不想在一个啜食中读出Hadoop中的整个文件,以节省线路时间和带宽。 (比方说5 – 10MB) 目前我正在使用BufferedReader返回工作正常的小摘要文件 ArrayList lines = new ArrayList(); … for (FileStatus item: items) { // ignoring files like _SUCCESS if(item.getPath().getName().startsWith(“_”)) { continue; } in = fs.open(item.getPath()); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String line; line = br.readLine(); while (line != null) { line = line.replaceAll(“(\\r|\\n)”, “”); lines.add(line.split(“\t”)); line = […]

Java:如何根据条件从数组中删除对象?

我有一个对象数组(文件列表)。 如何遍历此数组并删除一些对象(使用Java) – 具体取决于条件? File[] files = file.listFiles(); for(File f: files) { if(someCondition) { // remove } }

如何使用LinkedHashMap获取子图?

目前,我正在使用TreeMap来存储一些x和y坐标,但与ArrayList或HashMap相比,迭代速度非常慢。 我正在使用它,因为我需要subMap()方法,因此即使精确的X值(键)不存在,我也可以在确定的范围内获得X值。 LinkedHashMap与HashMap速度几乎相同,我可以按照插入顺序迭代键(我需要插入顺序或比较顺序,因为它在TreeMap中完成)但我没有submap()方法。 在TreeMap中,我可以非常快速地生成子图。 是否存在任何数据结构或某种方式来存储有序值(通过插入顺序或比较器)比TreeMap更快,即使精确值不在地图中,也允许获取范围内的子图? 我的意思是,也许我想要2到25之间的值,但2不存在,最近的是3,所以它将从3到25返回一个子图。或者某种方式将此function添加到LinkedHashMap ?

确定数字数组是否可以分成两个数组,每个数组保持相同的数字总和

下面是一个代码,用于确定数字数组是否可以分为两个数组,每个数组都包含相同的数字总和。 例如:{1,3,2,6}可以分为{6}和{1,2,3},因此返回true而{1,5,7}不能分为两个,平衡数组,因此返回虚假 public boolean canBalance(int[] nums) { for (int i = 0; i < nums.length; i++) { int sum = 0; for (int j = 0; j < i; j++) sum += nums[j]; for (int j = i; j < nums.length; j++) sum -= nums[j]; if (sum == 0) return true; } return false; } […]

Java foreach迭代顺序是否精确定义了基元?

示例代码: int a[] = new int[]{0, 1, 2, 3}; int result = 0; for (int i : a) result += i; 循环是否保证按顺序迭代a[0] , a[1] , a[2] , a[3] ? 我坚信答案是肯定的,但这个页面似乎并没有明确说明秩序。 有一个坚实的参考?

Google Collections ImmutableMap迭代顺序

我需要Google Collection ImmutableMap和LinkedHashMap组合 – 具有定义的迭代顺序的不可变映射。 似乎ImmutableMap本身实际上已经定义了迭代顺序,至少它的文档说 : 基于散列的不可变Map,具有可靠的用户指定迭代顺序。 但是没有更多细节。 快速测试表明这可能是真的,但我想确定。 不幸的是,快速浏览一下这些消息来源对我没什么帮助。 我的问题是:我可以依赖ImmutableMap的迭代顺序吗? 如果我执行ImmutableMap.copyOf(linkedHashMap) ,它是否与原始链接哈希映射具有相同的迭代顺序? 构建器创建的不可变映射怎么样? 一些权威答案的链接会有所帮助,因为谷歌没有找到任何有用的东西。 (不,与来源的链接不计算在内)。

现代for循环的原始数组

原始数组上的for循环之间是否有任何性能差异? 假设: double[] doubleArray = new double[300000]; for (double var: doubleArray) someComplexCalculation(var); 要么 : for ( int i = 0, y = doubleArray.length; i < y; i++) someComplexCalculation(doubleArray[i]); 测试结果 我实际上描述了它: Total timeused for modern loop= 13269ms Total timeused for old loop = 15370ms 所以现代循环实际上运行得更快,至少在我的Mac OSX JVM 1.5上。