第三章 数组、向量和字符串
? Java中提供数组、向量和字符串 。
? 数组有序数据的集合,数组名和下标唯一地确
定数组中的元素。根据其存储数据的类型可以
分为基本类型和引用类型两种。
? 向量是允许不同类型元素共存的变长数组。
? Java为字符串处理提供了强大的处理能力。主
要是通过定义两种字符串类,String类和
StringBuffer类进行处理。
§ 3.1数组
本节内容,
? 利用数组操作数据值的集合
? 掌握一维数组的声明和使用
? 掌握简单数据类型数组的声明和使用
? 了解引用数据类型数组的声明和使用
? 了解二维数组的声明和使用
3.1.1 数组的概念
? 数组是有序数据的集合。数组名和下标唯一地
标识一个数组中的一个元素。
? JAVA中,数组的元素是从 0开始编号。
? 在 JAVA中,数组本身也是一类对象,是 Object
类的派生类 。
3.1.2 一维数组
? 在 JAVA中,数组是作为数组类的一个实例来
处理的,因此使用 new运算符来创建一个数组。
定义一维数组
? 类型标识符 数组名 [];
? 或
? 类型标识符 [] 数组名 ;
double price[];
double[] price;
初始化一维数组
? 类型标识符 [] 数组名={元素 1 [,元素 2…] } ;
? 或
? 数组名= new类型标识符 [常量表达式 ];
?price=new double[100];
?price=new double[10*10];
?price=new double [n*2]; //假定 n是一个已知值的常量
一维数组元素的引用
? 数组名 [下标 ]
?for(int i = 0;i < price.length;i++)
? { //随机生成 100以内的一个整数
? price[i]=rand.nextInt() %100;
? }
一维数组的应用
? 冒泡排序
8
9
5
4
2
8
9
5
4
2
8
5
9
4
2
8
5
4
9
2
8
5
4
2
9
第 1 次 第 2 次 第 3 次 第 4 次 结 果
第 1 轮 比 较
8
5
4
2
9
5
8
4
2
9
5
4
8
2
9
5
4
2
8
9
第 1 次 第 2 次 第 3 次
结 果
第 2 轮 比 较
( a ) ( b )
引用(对象)数组
? 在 Java中,可以使用引用类型的数组(也称为
对象数组)。
? Student[] stu; //定义一个 Student类型数组
? stu=new Student[10]; //分配存储空间,创建
Student类型数组
? ?
- - n u l l
0 1 2 8 9
s t u
S t u d e n t [ ] s t u ;
s t u = n e w S t u d e n t [ 1 0 ] ;
二维数组
? 带有 2个下标的多维数组通常用来表示一张二维
表,表中的信息按行和列的形式排列。要标识
一个二维表,必须指定 2个索引值。按惯例,第
一个索引指明元素所在的行,第二个索引指明
元素所在的列。图 3.1.6说明了一个二维数组 a,
它包括 3行 4列(即,3*4的数组)。一般而言,
一个有 m行 n列的数组称为 m*n的数组。
a [ 0 ] [ 0 ] a [ 0 ] [ 1 ] a [ 0 ] [ 2 ] a [ 0 ] [ 3 ]
a [ 1 ] [ 0 ] a [ 1 ] [ 1 ] a [ 1 ] [ 2 ] a [ 1 ] [ 3 ]
a [ 2 ] [ 0 ] a [ 2 ] [ 1 ] a [ 2 ] [ 2 ] a [ 2 ] [ 3 ]
c o l u m n 0 c o l u m n 1 c o l u m n 2 c o l u m n 3
r o w 0
r o w 1
r o w 2
数 组 名
行 标
列 标
二维数组的定义
? 类型标识符 数组名 [][];
? 或
? 类型标识符 [][] 数组名 ;
? 还可以写成
? 类型标识符 [] 数组名 [];
二维数组的初始化
? ( 1)静态初始化
? 类型标识符 [][] 数组名={ {元素 1 [,元素 2…]}
[,{元素 1 [,元素 2…]}] } ;
? ( 2)动态初始化
? 数组名= new类型标识符 [常量表达式 ] [常量表
达式 ];
二维数组元素的引用
? 二维数组元素的引用也与一维数组的引用相类
似,都是通过使用数组名和下标来完成,其一
般形式为
? 数组名 [ 行标 ] [ 列标 ]
不规则的二维数组
? 不规则的二维数组的具体实现是:先定义一个
二维数组变量,并指定第一维的元素个数,然
后再分别为第二维数组(即第一维数组的每个
数组元素)分配不同的存储空间。由于此时是
分别为第二维数组分配存储空间,且所分配的
存储空间可以大小不一,因此就构成了不规则
的二维数组。
向量
? 向量的概念
? 向量与数组的区别
? 向量的方法
? 向量的应用
向量概述
? 向量( Vector)是类似于数组的、顺序存储的
数据结构,但具有比数组更强大的功能,它是
允许不同类型元素共存的变长数组 。
? 元素( element):向量中存放的单个数据,其类型必
须是引用类型,如“中国”就是存放在向量对象 v中的
一个元素。
? 容量( capacity):向量中最多能够保存的元素个
数,图中向量 v的容量为 7。
? 容量增加值( capacityIncrement):当目前容量无
法满足存储要求时,需要增加的容量。
? 大小( size):向量中已存放元素的个数,图中向
量 v目前的大小为 4。
? 索引( Index):向量中存储空间的编号,在 Java
中,向量跟数组一样,第一个元素从 0开始编号。
,中 国,
,日 本,
,美 国,
,英 国,
s i z e = 4
0
1
2
3
4
5
6
c a p a c i t y = 7
e l e m e n t
向 量 v
i n d e x
创建向量类的对象(构造函数)
– public Vector(int initialCapacity,int
capacityIncrement)
? 创建一个空向量,其初始容量为指定容量
initialCapacity,容量增加值为指定大小
capacityInrement。如
? Vetor v =new Vector(1,1);
? 即表明新创建的向量对象 v的当前容量是 1,每
次要增加空间时,其容量加 1。
– public Vector(int initialCapacity)
? 创建一个空向量,其初始容量为指定容量
initialCapacity,容量增加值为当前容量。如,
? Vector v = new Vector(5);
? 即表明新创建的向量对象 v的当前容量是 5,每
次要增加空间时,将成倍增加容量
– public Vector()
? 创建一个空向量,这时向量的初始容量默认为
10,容量增加值为当前容量。
往向量对象中增加元素
– 在向量的尾部增加数据
? ① public void addElement(Object obj);
? ② public void add(Object obj); //JDK1.2以上版本提供
– 在向量中的指定位置增加数据
? ① public void insertElementAt(Object obj,int index)
? throws ArrayIndexOutOfBoundsException;
? ② public void add(int index,Object obj)
? throws ArrayIndexOutOfBoundsException;
访问向量中的元素
– 访问第一个元素
? public Object firstElement() throws NoSuchElementException;
– 访问最后一个元素
? public Object lastElement() throws NoSuchElementException;
– 访问指定位置的元素
? 在 Vector类中访问指定位置元素的方法有两个,
? ① public Object elementAt(int index) throws
ArrayIndexOutOfBoundsException;
? ② public Object get (int index) throws
ArrayIndexOutOfBoundsException;//JDK1.2以上版本
状态检测方法
– public boolean isEmpty()
? 使用 IsEmpty方法,可以测试向量是否有元素存在,
如果有则返回 true,这时向量的 szie为 0;否则返回
false。
– public int size()
? size方法可以返回向量中已经存放的元素的数量
– public int capacity()
? capacity方法返回向量的当前容量
改变向量的容量( capacity)和大小
( size)
– public void ensureCapacity(int minCapacity)
? 该方法用于设置向量的容量下限,即最少能够容纳的
元素个数。如果向量的当前容量小于设置值minCapacity,则该方法将增加向量的当前容量以满足
最低的容量要求;如果向量的当前容量大于设置值
minCapacity,那么将不对当前容量进行调整。
– public void trimToSize()
? 该方法将一个向量的容量减小到其实际所存储的元素
的个数,这个方法在减少向量所占据的无用空间时,
经常使用。
– public void setSize(int newSize)
查找向量中的元素
– public boolean contains(Object elem);
? 检查向量中是否包括指定的对象元素 elem。如果 elem在向量中至少
出现一次,则返回 true,否则返回 false。
– public int indexOf(Object elem);
? 返回指定的对象元素 elem在向量中第一次出现的位置,如果指定的
对象元素在向量中不存在则返回 -1。
– public int indexOf(Object elem,int start_index) throws
IndexOutOfBoundsException;
? 从指定的 start_index位置开始搜索,返回找到的第一个与指定对象
元素 elem相同的元素的位置,如果指定的对象元素在向量中不存在
则返回 -1。
修改向量中的元素
? public void setElementAt(Object obj,int index)
? throws ArrayIndexOutOfBoundsException;
? public Object set ( int index,Object obj)
? throws ArrayIndexOutOfBoundsException;
//JDK1.2以上版本提供
删除向量中的元素
? 删除指定位置的元素
? ① public void removeElementAt(int index) throws
ArrayIndexOutOfBoundsException;
? ② public Object remove (int index)
? throws ArrayIndexOutOfBoundsException; //JDK1.2
以上版本提供
? 删除 index指定位置上的元素,同时将 index位置后所有
的元素前移一位。
? 删除给定的元素
? ① public boolean removeElement(Object obj) ;
? ② public boolean remove Object obj) ; //JDK1.2以
上版本提供
? 删除向量中第一个与指定 obj对象相同的元素,同
时将后面所有的元素前移一位。如果要删除的元素在
对象中不存在,将返回 false,否则返回值为 true。
? 删除全部元素
? ① public void removeAllElements();
? ② public void clear();//JDK1.2以上版本提供
? 删除向量中的全部元素,当执行完后,向量将被清
空。