201771010125王瑜《面向对象程序设计(Java)》第十一周学习总结
第十一周学习总结
一、理论部分
1.Collection和Map是Java集合框架的根接口
2.Set无序不允许元素重复
3.HashSet (无序) TreeSet (有序)
4.List有序且允许元素重复
5.Map也属于集合系统,但和Collection接口没关系。Map是key对value的映射集合,其中key列就是一个集合。key不能重复,但是value可以重复
6. HashMap (无序) TreeMap (有序) WeakHashMap Hashtable (无序,线程安全) 6.SortedSet和SortedMap接口对元素按指定规则排序,SortedMap是对key列进行排序。
7.ArrayList和Vector区别:
(1)ArrayList和Vector都实现了List接口,都是通过数组实现的
(2)ArrayList是非线程安全的, Vector是线程安全的
(3)List第一次创建的时候,会有一个初始大小,随着不断向List中增加元素,当List 认为容量不够的时候就会进行扩容。ArrayList增长原来的50%,Vector缺省情况下自动增长原来一倍的数组长度
8.集合类的特点
(1)只容纳对象
(2)集合类容纳的对象都是Object类的实例,一旦把一个对象置入集合类中,它的类信息将丢失,这样设计的目的是为了集合类的通用性
9.Stack类是Vector的子类
10.Hashtable通过键来查找元素。Hashtable用散列码(hashcode)来确定键。所有对象都有一个散列码,可以通过Object类的hashCode()方法获得
二、实验部分
1、实验目的与要求
(1) 掌握Vetor、Stack、Hashtable三个类的用途及常用API;
(2) 了解java集合框架体系组成;
(3) 掌握ArrayList、LinkList两个类的用途及常用API。
(4) 了解HashSet类、TreeSet类的用途及常用API。
(5)了解HashMap、TreeMap两个类的用途及常用API;
(6) 结对编程(Pair programming)练习,体验程序开发中的两人合作。
2、实验内容和步骤
实验1: 导入第9章示例程序,测试程序并进行代码注释。
测试程序1:
l 使用JDK命令运行编辑、运行以下三个示例程序
//示例程序1 import java.util.Vector;
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++) ((Cat) cats.elementAt(i)).print(); } } |
//示例程序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]); System.out.println(stk); System.out.println("element 2=" + stk.elementAt(2)); while (!stk.empty()) System.out.println(stk.pop()); } } |
//示例程序3 import java.util.*;
class Counter { int i = 1;
public String toString() { return Integer.toString(i); } }
public class Statistics { public static void main(String[] args) { Hashtable ht = new Hashtable(); for (int i = 0; i < 10000; i++) { Integer r = new Integer((int) (Math.random() * 20)); if (ht.containsKey(r)) ((Counter) ht.get(r)).i++; else ht.put(r, new Counter()); } System.out.println(ht); } } |
示例一结果:
由结果知道示例一代码不合适,改后为:
import java.util.Vector;
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结果:
示例3结果:
测试程序2:
l 使用JDK命令编辑运行ArrayListDemo和LinkedListDemo两个程序,结合程序运行结果理解程序;
结果:
import java.util.*;
public class ArrayListDemo {
public static void main(String[] argv) {
ArrayList al = new ArrayList();
// 向ArrayList添加很多元素…
al.add(new Integer(11));
al.add(new Integer(12));
al.add(new Integer(13));//整型包装器类对象
al.add(new String("hello"));//字符串类对象,说明集合中的元素的类型可以不同
// 首先使用for循环将它们打印出来。
System.out.println("Retrieving by index:");
for (int i = 0; i < al.size(); i++) {
System.out.println("Element " + i + " = " + al.get(i));
}
}
}
添加一个输出一个集合对象的结果:
结果:
在Elipse环境下编辑运行调试教材360页程序9-1,结合程序运行结果理解程序;
l 掌握ArrayList、LinkList两个类的用途及常用API
测试程序3:
l 运行SetDemo程序,结合运行结果理解程序;
结果:
|在Elipse环境下调试教材365页程序9-2,结合运行结果理解程序;了解HashSet类的用途及常用API。
l 在Elipse环境下调试教材367页-368程序9-3、9-4,结合程序运行结果理解程序;了解TreeSet类的用途及常用API。
结果:
测试程序4:
l 使用JDK命令运行HashMapDemo程序,结合程序运行结果理解程序;
结果:
l 了解HashMap、TreeMap两个类的用途及常用API。l 在Elipse环境下调试教材373页程序9-6,结合程序运行结果理解程序;
结果:
三 总结部分
本章学习中,我没有好好学习,对本章知识点还有许多不熟练的,在接下来的时间里我会再总结学习的