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:

使用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,结合程序运行结果理解程序;

掌握ArrayList、LinkList两个类的用途及常用API

 

测试程序3:

运行SetDemo程序,结合运行结果理解程序;

结果:

在Elipse环境下调试教材365页程序9-2,结合运行结果理解程序;了解HashSet类的用途及常用API。

在Elipse环境下调试教材367页-368程序9-3、9-4,结合程序运行结果理解程序;了解TreeSet类的用途及常用API。

结果:

测试程序4:

使用JDK命令运行HashMapDemo程序,结合程序运行结果理解程序;

结果:

了解HashMap、TreeMap两个类的用途及常用API。在Elipse环境下调试教材373页程序9-6,结合程序运行结果理解程序;

结果:

三  总结部分

本章学习中,我没有好好学习,对本章知识点还有许多不熟练的,在接下来的时间里我会再总结学习的

猜你喜欢

转载自www.cnblogs.com/wy-201771010125/p/9942358.html