[19/03/12-星期二] 数组_遍历(for-each)&复制&java.util.Arrays类
一、遍历
for-each即增强for循环,是JDK1.5新增加的功能,专门用于读取数组或集合中所有的元素,即对数组进行遍历。
1 //数组遍历 for-each 2 public class Test_0312_01 3 { 4 public static void main(String[] args) 5 { 6 int arr[]=new int [5]; 7 for(int i=0;i<arr.length;i++){ //常规遍历的方法 8 arr[i]=2*i+1; 9 } 10 for(int i=0;i<arr.length;i++){ 11 System.out.printf("%-4d",arr[i]); 12 } 13 System.out.println(); 14 //for-each循环 只能用于读取数组元素的值,不能修改元素的值 15 16 for(int temp:arr){ //前边是定义个整型的变量temp,没有下标,中间是冒号,后边数组的名字 17 System.out.printf("%-4d",temp); //注意后边写的是临时变量temp,不是数组arr 18 } 19 20 System.out.println(); 21 String arr2[]={"李白","ABC","@&"}; 22 for(String temp:arr2){ 23 System.out.printf("%-5s",temp); 25 } 26 27 } 28 }
二、数组元素_复制&删除&增加
System类里也包含了一个static void arraycopy(object src,int srcpos,object dest, int destpos,int length)方法,该方法可以将src数组里的元素值赋给dest数组的元素,其中
srcpos指定从src数组的第几个元素开始赋值,length参数指定将src数组的多少个元素赋给dest数组的元素。
函数: System.arraycopy(src---源数组, srcPots---源数组起始下标, dest----目标数组 ,destPots---目标数组起始下标, length---拷贝长度是多少)
1 //数组的复制拷贝与删除增加指定位置的元素 2 public class Test_0312_02 3 { 4 //复制一个数组到另一个数组 s:送进来的源数组 srcPots:源数组的起始位置 destPots:目标数组的起始位置 length:要复制的长度 5 public static void copyElement(String[] s, int srcPots,int destPots,int length){ 6 String s1[]= new String[s.length]; 7 8 System.arraycopy(s,srcPots,s1,destPots,length);//核心语句 9 10 for(int i=0;i<s1.length;i++) 11 System.out.printf("%-6s",s1[i]); 12 13 System.out.println(); 14 } 15 //从一个数组中删除一个元素 核心下标index+1覆index s:送进来的源数组 index:要删除元素的下标。源下标srcPlots=index 16 public static void deleteElement(String[] s,int index){//index=2 目标下标destPlots=index | 0 1 2 3 4 17 18 System.arraycopy(s,index+1,s,index,s.length-1-index);//核心语句 |a b c d e 19 20 s[s.length-1]=null;// s.length=5 s.length-1=4(下标的上限) |删除后a b d e null 21 22 for(int i=0;i<s.length;i++) 23 System.out.printf("%-6s",s[i]); 24 25 System.out.println(); 26 27 28 } 29 30 //往一个数组中指定位置增加一个元素 31 public static void addElement(String[] s,int index,String temp){//index:要在下标为index的位置插入元素 32 33 String s2[]= new String[s.length+1]; //新建一个数组,且长度延长1 34 35 System.arraycopy(s,0,s2,0,index); // 把下标为index的元素前边的所有元素复制到s2数组,源数组和目标数组的下标均为0,长度为index(下标0到index-1有index个数) 36 37 System.arraycopy(s,index,s2,index+1,s.length-index); //0 - (index-1) 共index个数字,总个数-前(index-1)个数=要移动长度 38 39 s2[index]=temp; //从index位置开始每个数字后移1位,最后一步把插入的新元素放在index位置 40 41 for(int i=0;i<s2.length;i++) 42 System.out.printf("%-6s",s2[i]); 43 44 System.out.println(); 45 46 47 } 48 49 public static void main(String[] args) //主方法 50 { 51 52 String str[]={"a","b","c","d","e"}; 53 54 System.out.printf("%-6d%-6d%-6d%-6d%-6d\n",0,1,2,3,4); 55 56 for(String temp:str){ 57 58 System.out.printf("%-6s",temp); 59 60 } 61 System.out.println(); 62 63 copyElement(str,1,2,3); //从源数组的下标为1的位置(开始位置)复制到目标数组下标为2的位置(开始位置),长度为3 64 65 deleteElement(str,2);//把下标为2的元素删除 66 67 String str2[]={"a","b","c","d","e"};//执行完上步以后会把"c"删除,故重新复制一遍原来的str数组 68 69 addElement(str2,2,"f");//在下标为2的位置上插入一个元素 70 71 72 73 74 75 /*String s2[]=new String[10]; 76 77 System.arraycopy(s1,2,s2,6,3);//2:代表从s1的下标为2的地方开始复制(即从字符“c”处开始复制) 6:代表从s2下标为6的地方开始接受 78 79 for(String temp:s2) //for-each遍历的应用 3:代表复制长度为3 80 { 81 System.out.printf("%-6s",temp); 82 } */ 83 84 85 } 86 }
三、java.util.Arrays类
JDK提供的java.util.Arrays类,包含了常用的数组操作(即自带各种方法),方便我们日常开发。Arrays类包含了:排序 ( Arrays.sort( a) )、查找( Arrays.binarySearch(a,2) )、
填充 (Arrays.fill(a, 1) 仅限一维,多维要用循环)、 打印内容(Arrays.toString(a)) 等常见的操作。【以数组a为例】
【代码示例】
1 import java.util.*; 2 3 public class Test_0312_03 4 { 5 public static void main(String[] args) 6 { 7 int a[]={3,4,2,1}; 8 9 int b[]=new int[5]; 10 11 System.out.println(a);//会输出数组a的哈希地址 12 13 System.out.println(Arrays.toString(a)); //打印 会输出数组a中的内容,不同于Object中的toString() 14 15 Arrays.sort(a); //排序 16 17 System.out.println(Arrays.toString(a)); 18 19 System.out.println(Arrays.binarySearch(a,4)); //二分查找,使用前必须对它进行排序 若有这个数会输出这个数的下标,否则输出负数 20 21 System.out.println(Arrays.binarySearch(a,7)); 22 23 Arrays.fill(b, 6);//填充,多用于赋初值 24 25 System.out.println(Arrays.toString(b)); 26 27 28 } 29 }

浙公网安备 33010602011771号