201771010125王瑜《面向对象程序设计(Java)》第十一周学习总结

Posted wy-201771010125

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,结合程序运行结果理解程序;

结果:

技术分享图片

三  总结部分

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


以上是关于201771010125王瑜《面向对象程序设计(Java)》第十一周学习总结的主要内容,如果未能解决你的问题,请参考以下文章

201771010125王瑜《面向对象程序设计(java)》第十七周学习总结

201771010125王瑜《面向对象程序设计(Java)》第七周学习总结

201771010125王瑜《面向对象程序设计(Java)》第四周学习总结

201771010125王瑜《面向对象程序设计(Java)》第十一周学习总结

201771010125王瑜《面向对象程序设计(Java)》第九周学习总结

201771010125王瑜《面向对象程序设计(Java)》第八周学习总结