1、实验目的与要求
(1) 掌握Vetor、Stack、Hashtable三个类的用途及常用API;
(2) 了解java集合框架体系组成;
(3) 掌握ArrayList、LinkList两个类的用途及常用API。
(4) 了解HashSet类、TreeSet类的用途及常用API。
(5)了解HashMap、TreeMap两个类的用途及常用API;
(6) 结对编程(Pair programming)练习,体验程序开发中的两人合作。
一、理论知识
1、数据结构介绍
(1)一般将数据结构分为两大类:线性数据结构和 非线性数据结构。
(2)线性数据结构:线性表、栈、队列、串、数组 和文件。
(3)线性表按其存储结构可分为顺序表和链表, 用顺序存储结构存储的线性表称为顺序表;
(4)栈(Stack)也是一种特殊的 线性表,是一种后进先出 (LIFO)的结构。
(5)队列(Queue)是限定所有的插入只能在表的一端进行 ,而所有的删除都在表的另一端进行的线性表。
(6)散列表又称为哈希表;
(7)负载因子越高 (越接近1.0),内存的使用效率越高,元素的 寻找时间越长。负载因子越低 (越接近0.0),元素的寻找时 间越短,内存浪费越多。
2、JAVA的集合框架
(1)集合(Collection或称为容器 )是一种包含多个元素 并提供对所包含元素操作方法的类,其包含的元 素可以由同一类型的对象组成,也可以由不同类 型的对象组成。
(2)框架就是一个类库的集合,框架中包含很多 超类,编程者创建这些超类的子类可较方便的设 计设计程序所需的类。例如:Swing类包
(3)集合类的作用: Java的集合类提供了一些基本数据结构的支持。 – 例如Vector;
(4)集合类的使用: Java的集合类包含在java.util包中。
(5)集合类的特点:特点一: 只容纳对象。
特点二:集合类容纳的对象都是Object类的实例,一旦把一个对象置入集合类中,它的类信息将丢失;
3、JDK1.1版本中的集合类
(1)Vector中只能存放对象。
Vector的元素通过下标进行访问。
Vector类关键属性: capacity表示集合最多能容纳的元素个数。capacityIncrement表示每次增加多少容量。size表示集合当前元素个数。
(2)Vector类的关键方法: void addElement(Object obj) void add(int index, Object element) Object elementAt(int index)
(3)Stack类是Vector的子类。
Stack类描述堆栈数据结构,即LIFO。
(4)Hashtable类 :Hashtable通过键来查找元素。
Hashtable用散列码(hashcode)来确定键。所有对象都有一个散列码,可以通过Object类的 hashCode()方法获得。
2、实验内容和步骤
实验1: 导入第9章示例程序,测试程序并进行代码注释。
测试程序1:
l 使用JDK命令运行编辑、运行以下三个示例程序,结合运行结果理解程序;
掌握Vetor、Stack、Hashtable三个类的用途及常用API。
import java.util.Vector; //示例程序1 class Cat { private int catNumber; Cat(int i) { catNumber = i; } void print() { System.out.println("Cat #" + catNumber); } } class Dog { private int dogNumber; Dog(int i) { dogNumber = i; } void print() { System.out.println("Dog #" + dogNumber); } } public class CatsAndDogs { public static void main(String[] args) { Vector cats = new Vector();//创建一个新的类 for (int i = 0; i < 7; i++) cats.addElement(new Cat(i)); cats.addElement(new Dog(7)); for (int i = 0; i < cats.size(); i++) if(cats.elementAt(i)instanceof Cat)// instanceof运算符是用来指出对象是否是特定类的一个实例 { ((Cat) cats.elementAt(i)).print(); }else { ((Dog) cats.elementAt(i)).print(); } }}
结果如下:
示例2:
//示例程序2 import java.util.*; public class Stacks { static String[] months = { "1", "2", "3", "4" }; public static void main(String[] args) { Stack stk = new Stack(); for (int i = 0; i < months.length; i++) stk.push(months[i]);//放入一个i值 System.out.println(stk); System.out.println("element 2=" + stk.elementAt(2));//element表示一个节点 while (!stk.empty()) System.out.println(stk.pop());//出栈操作 } }