书本自学"/>
Java学习3——书本自学
第五章 数组与字符串
在程序设计中,数组与字符串是常用的数据结构。无论是在面向过程的程序设计中,还是在面向对象 的程序设计中,数组和字符串都有着重要的作用。
5.1 数组的基本概念
所谓数组,就是若干个相同数据类型的元素按一定顺序排列的集合。
Java内存分配有两种形式:栈内存和堆内存。在方法中定义一些基本烈性的变量和对象的引用变量都在方法的栈内存中分配,在一段代码块中定义一个变量时,Java就在栈内存中为这个变量分配空间。
堆内存用来存放由new运算符创建的数组和对象,在堆中分配内存,由Java虚拟机的自动垃圾回收期来管理。
数组有如下特点:
数组是相同数据类型的元素的集合;
数组总的各元素是有先后顺序的,他们在内存中按照这个先后顺序连续存放在一起;
数组元素用整个数组的名字和他自己在数中的顺序的位置来表示。
5.2 一维数组
要使用Java语言的数组,要经过三个步骤。一是声明数组;二是创建空间,三是创建数组元素并赋值。前两个步骤的语法如下:
数据类型[ ] 数组名; //声明一维数组
数组名=new 数据类型[个数]; //分配内存给数组
可以将语句合并成一行。如下:
数据类型[ ] 数组名 = new 数据类型[个数];
数组类Arrays的常用方法:
方法 说明
public static binarySearch(X[],a,X key) X是任意数据类型,返回key在升序数组a中首次出现的下标,若a中不包含Key,则返回负值
public static sort(X[],a) X是任意数据类型。对数组a升序排列后仍存放在a中。
public static void sort(X[], a, int formIndex, int toIndex) 对任意类型的数组a中从formatIndex到toIndex-1的元素进行升序排序,其结果仍存在于a数组中。
public static X[] copyOf(X[ ] original, int newLength) 截取任意类型数组original中长度newLength的数组元素拷贝给调用数组。
public bollean eauals(X[] a, X[] a2) 判断同类型的两个数组a和a2中对应元素值是否相等,若相等则返回true,否则返回false。
5.2.2 一维数组元素的访问
使用数组名和下标对元素进行引用,Java语言的下标是从0开始的。
5.2.3 一维数组的初始化及应用
在定义数组的同时对数组进行赋值,这种赋值方法称为初始化。
//filename: App5_2.java
public class App5_2
{public static void main(String[] args){int i,max,sec;int[] a= {8,50,20,7,81,55,76,93};if(a[0]>a[1]){max=a[0];sec=a[1];}else{max=a[1];sec=a[0];}System.out.println("All elements in array are "+a[0]+" "+a[1]);for(i=2;i<a.length;i++){System.out.print(" "+a[i]);if(a[i]>max){sec=max;max=a[i];}elseif(a[i]>sec) sec=a[i];}System.out.print("\nthe maximum is "+max);System.out.println(" the second maximum is "+sec);}
5.3 foreach语句与数组
自JDK5.0开始引入一种新的for循环,它不用下标就可以遍历整个数组,这种新的循环称为foreach语句。格式如下:
for(type element :array)
{
System.out.println(element);
.
.
.
}
其功能是每次从数组array中取出一个元素,自动赋值给变量element,用户不用判断是否超出了数组的长度,需要注意的是,element的类型必须和数组array中的元素的类型是先相同的。
例如:
int[ ] arr={1,3,4,5};
for (int element :arr)
system.out.println(element);
5.4 多维数组
二位数组的声明方式与一维数组类似,内存的分配也是用new运算符。其声明格式如下:
数据类型[ ] [ ] 数组名;
数组名= new 数据类型 [行数] [列数]
C语言中的二维数组是规则的矩形,而Java语言的二维数组不一定是规则的矩形。Java中的二维数组可以看作是多个一维数组。如果数组对象正好是一个mXn形式的规则矩阵,不用先创建高维的数组对象之后逐一创建低维的数组对象。完全可以用一条语句在创建高维对象的同时创建低维对象。
x.length; //计算数组x的行数
x[0].length; //计算数组x第一行的元素的个数
x[1].length; //计算数组x第二行的元素的个数
注意:与一一维数组相同,用new运算符来为数组申请空间时,很容易在各数组的指定中出现错误,二维数组要求必须指定高层数组。用户不需要定义数组的长度,在数据类型的方括号内不必定义任何的内容。再踩,在大括号内含有几组大括号,每组大括号内的初值都会一次给数组的第1、2、...、n+1行元素。
//filename: App5_4.java
public class App5_4
{public static void main(String[] args){int i,j;int level=7;int[][] iaYong=new int[level][];System.out.println("Yang hui triangle");for(i=0;i<iaYong.length; i++)iaYong[i] = new int[i+1];iaYong[0][0]=1;for(i=1;i<iaYong.length; i++){iaYong[i][0]=1;for(j=1;j<iaYong[i].length-1; j++)iaYong[i][j]=iaYong[i-1][j-1]+iaYong[i-1][j];iaYong[i][iaYong[i].length-1]=1;}for(int[] row: iaYong){for(int col:row)System.out.println(col+" ");System.out.println();}}
}
5.4.2 三维以上的多维数组
要想提高数组的 维度,只需要在声明数组的时候将小标与中括号增加一组即可。
5.5 字符串
字符串就是一系列字符的序列。在Java语言中使用一对双引号括起来的序列。从某种意义上来说,字符串类似于字符数组。程序中提到的字符串分为两大类:一是创建之后不会再做修改和变动的字符串变量;二是创建之后允许在做修改的字符串变量。
5.5.1 字符串变量的创建
字符串变量的创建和其他变量的创建一样,可以分为两步,对象的声明与对象的创建两步。
格式一:
String 变量名;
变量名 = new String("字符串");
格式二:
String 变量名 = new String(“字符串");
格式三:
String 变量名=”字符串“;
5.5.2 String类的常用方法
字符串变量名.方法名();
方法名 说明
public int length() 返回字符串的长度
public boolean equals(Object anObject) 将给定的字符串与当前字符串相比较,若两字符串相等,则返回true,否则返回false
public String substring(int beginIndex) 返回字符串中从beginIndex开始的字符串
public String substring(int beginIndex, int endIndex) 返回从beginIndex到endIndex-1的子串
public char charAt(int index) 返回index指定位置的字符
public int indexOf(String str) 返回str在字符串中的第一次出现的位置
public int compareTo(String anotherString) 若调用该方法的字符串大于参数字符串,则返回大于0的值,若相等,则返回0,若小于字符串,则返回小于0的值。
public String replace(char oldChar, char newChar) 以newChar字符替换字符串中所有oldChar字符
public String trim() 去掉字符串的首尾空格
public string toLowerCase() 将字符串中的所有字符都转换为小写字符
public String toUpperCase() 将字符串中的所有字符都转换成大写字符
//filename:App5_6.java 判断回文字符串
public class App5_6
{public static void main(String[] args){String str="rotor";int i=0,n;boolean yn=true;if(args.length>0)str=args[0];System.out.println("sr="+str);n=str.length();char sChar,eChar;while(yn&&(i<n/2)){sChar=str.charAt(i);eChar=str.charAt(n-i-1);System.out.println("sChar="+sChar+" eChar="+eChar);if(sChar==eChar)i++;elseyn=false; }System.out.println("Algorithm 1: "+yn);String temp="",sub1="";for(i=0;i<n;i++){sub1=str.substring(i,i+1);temp=sub1+temp;}System.out.println("temp="+temp);System.out.println("Algorithm 2:"+str.equals(temp));}
}
更多推荐
Java学习3——书本自学
发布评论