一、foreach语句
在之前的学习中,我们使用for循环(一维数组)的或for循环嵌套(二维数组)的方式,遍历数组中的每一个元素,这种方式比较繁琐。foreach语句的出现,简化了遍历数组和集合的过程。
下面让我们一起来学习foreach语句
其语法格式为
for (数组或集合的数据类型 元素变量 x :数组或集合对象) {
处理元素变量 x
}
下面我们具体操作,对比一下for循环和foreach语句
//foreach 和 for 遍历一维数组的区别
int one[] = {2,7,4,5};
//foreach语句遍历一维数组
for (int x: one){
System.out.print(x + "");
}
//普通for语句遍历一维数组
for(int i = 0;i < one;i ++){
System.out.print(x + "");
}
通过对比发现,foreach语句只需要一个表达式就能达到的效果,for语句需要用三个表达式才能完成
foreach遍历二维数组的算法与一维数组不同,需要把二维数组看作一维数组的一维数组
eg :
int two [][] = {{1,2,3}},{ 0,9,8}};
//把二维数组 two 的每个元素看成类型元素为int []的一维数组
//one 是int []类型的一维数组
for (int [] one:two) {
for (int x:one) {
System.out.print(x + "");
}
}
说明:for (int [ ] one:two)表示二维数组 two的每个元素类型为int,变量 one 表示一个int [ ]元素;第五行 x 的迭代一维数组 one 中的每个元素
二、不规则数组
前面介绍的二维数组每行的列数相同,这种特点的数组称为规则数组,某些情况下浪费存储空间。Java能定义不规则二维数组,即二维数组每行的列数可以不同,某些情况下不规则数组能节约数组占用的存储空间。
例如,基于词库的中文分词技术,提取《三国演义》《水浒传》中的词。假设从《三国演义提取到刘备、关羽、张飞、曹操等1500个词。从《水浒传》提取到鲁智深、武松、景阳冈、扶危济困等1000个词。每本小说提取的词的数量不同,如果定义规则二维数组,如1500x2费了大量存储空间,也降低了算法效率。这种情况可采用Java不规则二维数组进行处理
小说 | 1 | 2 | 3 | 4 | 5 | 6 |
1 | 刘备 | 关羽 | 张飞 | 曹操 | 单刀赴会 | 步步为营 |
2 | 鲁智深 | 武松 | 景阳冈 | 扶危济困 |
如上表所示空白的单元格将造成储存空间的浪费
下面我们用案例来演示不规则二维数组的处理方法
package jsu.ike.com;
import java.util.Arrays;
public class chapter3 {
public static void main (String [] args) {
String novel[][] = new String[3][];//声明两行的二维数组表示2本小说,列数不确定
novel[0] = new String[3];//第一本小说3个词,第一行三列
novel[1] = new String[2];//第二本小说两个词,第二行二列
novel[0][0] = "刘备";
novel[0][1] = "光羽";
novel[0][2] = "张飞";
novel[1][0] = "鲁智深";
novel[1][1] = "扶危济困";
for (String [] book:novel) {
System.out.println();//换行
}
}
}
本期我们学习了foreach语句和不规则数组,二者都是在原先所学知识的加深和进化,不断优化我们的算法效率
感谢阅读,欢迎指正!