2009年浙江工业大学软件学院
Java程序设计视频教程Java程序设计视频教程
本讲主题:包装类与集合类
主讲教师:黄洪
2
包装类
包装类将基本数据类型包装成引用数据类型。
每个包装类对象都封装了基本类型的一个值。
基本数据类型 对应的包装类
boolean Boolean
byte Byte
char Character
short Short
int Integer
long Long
float Float
double Double
3
包装类
包装类中包含了很多有用的方法和常量。
创建相应的包装类对象(Xxx表示包装类的名称)
Xxx(a value)
Xxx(String s)
类型的最大值与最小值
MIN_VALUE
MAX_VALUE
将字符串转换成该类型对应的基本数据类型
public static xxx parseXxx(String s),其中Xxx表示基本数据类型名
称
将该类型的对象转换成字符串
public String toString()
public static String toString( xxx anxxxValue)
public static String toString(int i, int radix) //同时实现数制转换
4
包装类
例:利用包装类Integer的parseInt方法,
将字符串转换为整数。
public static int parseInt(String s)
throws NumberFormatException
请大家回去自己仔细研究各包装类及其方法。
5
class TestInteger
{
public static void main(String [] args)
{
int i1= (args[0]);
int i2= (args[1]);
( i1+i2 );
}
}
6
集合类
一个集合类对象用于表示了一组对象的集合,
是对象的容器。
7
Set
Set不能包含重复的元素。
Set 接口定义:
public interface Set {
// 基本方法
int size();
boolean isEmpty();
boolean contains(Object element);
boolean add(Object element);
boolean remove(Object element);
Iterator iterator();
…
}
8
List
List是有序的集合,元素可以重复。
List接口定义:
public interface List extends Collection {
Object get(int index);
Object set(int index, Object element); // Optional
void add(int index, Object element); // Optional
Object remove(int index); // Optional
abstract boolean addAll(int index, Collection c); // Optional
// Search
int indexOf(Object o);
int lastIndexOf(Object o);
…
}
List的实现: Vector,ArrayList, LinkedList
9
Vector与ArrayList
Vector与ArrayList功能类似,但Vector是
多线程安全的,具有多线程同步机制,能够
保证多个线程对同一个Vector对象操作时数
据的正确性。而ArrayList则没有处理多线
程同步问题。
本讲介绍Vector
10
向量Vector
Vector是一个类,功能类似数组,但存在以下区别
元素的个数可变
元素的类型必须是引用类型
Vector对象中可以存放的元素个数称为向量的容量
(capacity)
Vector对象中实际元素的个数称为向量的长度
(size)
当长度超出容量时,向量对象的容量会自动扩大,
一次扩大一个容量增量;容量增量为0时,容量扩
大一倍。
Vector类在包中,使用时要引入(在类前
面用import ;)或用完整的名称。
11
向量变量的声明
声明格式:
Vector<向量元素的数据类型> 变量名
例:
声明一个元素类型为字符串的向量变量vs
Vector<String> vs;
下面的声明是错误的,因为int不是引用类型。
Vector<int> vi;
下面的声明被允许,但会出现编译警告
Vector vo;
12
向量的构造方法
创建初始容量为10,默认增量为0的向量对象:
new Vector<元素类型>()
创建初始容量为initialCapacity,默认增量为0的
向量对象:
new Vector<元素类型>(int initialCapacity)
创建初始容量为initialCapacity,默认增量为
capacityInc的向量对象:
new Vector<元素类型>(int initialCapacity,int
capacityInc)
构造方法不指定元素类型会出现编译警告
13
声明向量变量并实例化向量对象的例子
变量vs引用一个元素类型为字符串的向量,
其初始容量为10,默认增量为0:
Vector<String> vs=new Vector<String>();
变量vo引用一个没有指定元素类型的向量,
其初始容量为16,默认增量为8:
Vector vo=new Vector(16,8);
14
对向量的主要操作
增加元素
将指定元素追加到此向量的末尾。
boolean add(E o)
插入元素
在此向量的指定位置插入指定的元素,和数组一样
index的取值从0开始。
void add(int index, E element)
修改元素
用指定的元素替换此向量中指定位置index处的元素。
E set(int index, E element)
15
对向量的主要操作(续)
删除元素
移除此向量中指定位置的元素。
E remove(int index)
移除此向量中指定元素的第一个匹配项,如果
向量不包含该元素,则元素保持不变。
boolean remove(Object o)
从此向量中移除所有元素。
void clear()
16
对向量的主要操作(续)
查询
返回向量中指定位置的元素。
E get(int index)
判断指定的对象是否为此向量中的某个元素。
boolean contains(Object elem)
返回此向量的第一个元素(位于索引 0 处的项)。
E firstElement()
返回此向量的最后一个元素。
E lastElement()
17
对向量的主要操作(续)
查询元素的位置索引
返回给定参数的第一个匹配项的索引,使用 equals 方法测试
相等性。没有匹配项则返回-1。
int indexOf(Object elem)
返回给定参数的第一个匹配项的索引,从 index 处开始匹配,
并使用 equals 方法测试其相等性。没有匹配项则返回-1
int indexOf(Object elem, int index)
返回指定的对象在此向量中最后一个匹配项的索引。没有匹配
项则返回-1。
int lastIndexOf(Object elem)
从后往前搜索指定的对象并返回其索引。从指定的索引处开始
搜索。没有匹配项则返回-1。
int lastIndexOf(Object elem, int index)
18
对向量的主要操作(续)
查询向量的相关信息
返回此向量的当前容量。
int capacity()
返回此向量中的元素个数。
int size()
测试此向量是否不包含元素。
boolean isEmpty()
19
对向量的主要操作(续)
改变向量的长度或容量
设置此向量的长度。如果新长度大于老长度则尾部添加
null;如果新长度小于老长度则尾部元素删除;
void setSize(int newSize)
对此向量的容量进行微调,使其等于向量的当前大小。
void trimToSize()
增加此向量的容量(如有必要),以确保其至少能够保
存最小容量参数指定的元素个数。
void ensureCapacity(int minCapacity)
20
向量使用示例
import ;
class TestVector
{
public static void main(String [] args)
{
Vector<String> vs=new Vector<String>(16,8);
("1");
("2");
(1,"3");
(());
if (("3"))
("\"3\"is an element of vs");
("3");
(());
}
}
21
哈希表/散列表( Hashtable)
将数据按“关键字”(key)和“值
”(value)配对存放,通过key可以快速
找到value。其原理是建立key到value的映
射。
Java中实现哈希表的有三个类:
Hashtable, HashMap, WeakHashMap
, 他们的区别有三个,详见教材P149。
上述三个类在包中。
22
哈希表变量的声明
声明格式
Hashtable<关键字的类型,值类型> 变量名
或者
Hashtable 变量名
注意:
哈希表的关键字和值都必须是引用类型
第二种声明格式会导致编译警告
23
哈希表的构造方法
用缺省的容量11和装填因子构造一个新的空
哈希表。
Hashtable <关键字的类型,值类型> ()
用指定的初始的容量和缺省的装填因子构造一个新
的空哈希表。
Hashtable <关键字的类型,值类型> (int)
用指定的初始的容量和指定的装填因子构造一个新
的空哈希表。
Hashtable <关键字的类型,值类型> (int, float)
注意:不指明类型也可以,但会导致出现编译警告
24
声明哈希表变量并实例化哈希表对象
按默认的容量和装填因子创建一个哈希表对
象,其关键字是String类型,值是Integer
类型:
Hashtable<String,Integer> ht=new
Hashtable<String,Integer>();
创建一个初始容量为20,装填因子为的
哈希表对象,不指定关键字和值的类型。
Hashtable ht=new Hashtable(20,);
25
哈希表常用操作
添加元素
在该散列表中映射指定的kObject键到指定的 vObject
值。
V put(kObject, vObject)
查找元素
返回指定的键kObject在这个散列表中的映射值。
V get(kObject)
删除元素
从该散列表中删除键值为kObject的元素。
V remove(kObject)
清空该散列表使它不包含元素。
void clear()
26
哈希表常用操作(续)
检测
检测指定的对象是否是该散列表中的一个键。
boolean containsKey(Object key)
检测在该散列表中某些键是否映射到指定的值。
boolean contains(Object value)
返回该散列表中的元素个数。
int size()
27
哈希表使用示例
import ;
class TestHashtable
{
public static void main(String [] args)
{
Hashtable<String,String> ht=new
Hashtable<String,String>(20,);
("许斌","200726630420");
("陈梦瑶","200726470204");
(ht);
(("陈梦瑶"));
("陈梦瑶");
(("陈梦瑶"));
(("陈梦瑶"));
(());
}
}
28
习题
1、编写一个java成绩统计程序,输入一个班的java成绩(含姓名和分数),
统计出平均分,最高分、最低分,并打印成绩单。由于编程时人数不确
定,所以要求使用Vector或ArrayList完成上述程序。
2、研究生入学考试要考四门课,英语,数学,政治、专业,现在需要编写
一个查询软件,输入考生的准考证号,软件打印出考生的准考证号,姓
名、各门课程的成绩以及总成绩。请按以下步骤完成该软件
1)编写一个考生类,其成员变量包含考生姓名、四门课程的成绩以及计算
总分的方法。
2)编写一个主类,将准考证号作为关键字,考生对象作为元素值放入一个
Hashtable中,通过Hashtable完成查询操作。