集合练习题

1. 填空

Collection 接口的特点是元素是___对象______;

List 接口的特点是元素__有___(有|无)顺序,___不可以___(可以|不可以)重复; Set 接口的特点是元素__无___(有|无)顺序,__可以____(可以|不可以)重复;

Map 接口的特点是元素是_键值对_____,其中_值____可以重复,____键__不可以重复。

2. (List)有如下代码

import java.util.*;

public class TestList{

public static void main(String args[]){

List list = new ArrayList();

list.add(“Hello”);

list.add(“World”);

list.add(1, “Learn”);

list.add(1, “Java”);

printList(list);

}

public static void printList(List list){

System.out.prinltn(list);

}

}

要求:

1) 把//1 处的代码补充完整,要求输出list 中所有元素的内容

2) 写出程序执行的结果

Hello Java Learn World

3) 如果要把实现类由ArrayList 换为LinkedList,应该改哪里?ArrayList 和

LinkedList 使用上有什么区别?实现上有什么区别?

List list = new LinkedList();

LinkedList(更适用于频繁的插入、删除操作)

4) 如果要把实现类由ArrayList 换为Vector,应该改哪里?ArrayList 和Vector 使 用上有什么区别?实现上有什么区别?

List list = new Vector();

Vector(古老的实现类、线程安全的,但效率要低于ArrayList)

3. (List)写出下面程序的运行结果

import java.util.*;

public class TestList{

public static void main(String args[]){

List list = new ArrayList();

list.add(“Hello”);

list.add(“World”);

list.add(“Hello”);

list.add(“Learn”);

list.remove(“Hello”);

list.remove(0);

for(int i = 0; i

System.out.println(list.get(i));

}

}

}

World Learn

4. (Set,List)

import java.util.*;

public class TestListSet{

public static void main(String args[]){

List list = new ArrayList();

list.add(“Hello”);

list.add(“Learn”);

list.add(“Hello”);

list.add(“Welcome”);

Set set = new HashSet();

set.addAll(list);

System.out.println(set.size());

}

}

选择正确答案A

A. 编译不通过

B. 编译通过,运行时异常

C. 编译运行都正常,输出3

D. 编译运行都正常,输出4

5. (List)已知有一个Worker 类如下:

public class Worker {

private int age;

private String name;

private double salary;

public Worker (){}

public Worker (String name, int age, double salary){

this.name = name;

this.age = age;

this.salary = salary;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public double getSalary(){

return salary;

}

public void setSalary(double salary){

this.salary = salary;

}

public void work(){

System.out.println(name + “ work”);

}

}

完成下面的要求

1) 创建一个List,在List 中增加三个工人,基本信息如下:

姓名 年龄 工资

zhang3 18 3000

li4 25 3500

wang5 22 3200

ArrayList L=new ArrayList();

L.add(new Worker(zhang3,18,3000));

L.add(new Worker(li4,25,3500));

L.add(new Worker(wang5,22,3200));

2) 在li4 之前插入一个工人,信息为:姓名:zhao6,年龄:24,工资3300

L.add(1,new Worker(zhao6,24,330));

3) 删除wang5 的信息

L.remove(3);

4) 利用for 循环遍历,打印List 中所有工人的信息

先在Worker类中重写toString方法

for(int i=0;i

Syso(L.get(i));

5) 利用迭代遍历,对List 中所有的工人调用work 方法。

Iterator it=L.iterator();

while(it.hasNext()){

System.out.println(it.next());

}

6) 为Worker 类添加equals 方法

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false; Worker other = (Worker) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true;

6. (Set,Hash 算法)为上一题的Worker 类,在添加完equals 方法的基础上,添加一个 hashCode 方法。

public int hashCode(){

//1

}

有几种写法:

1) return 0;

2)

int result = 0;

if (name != null) result = name.hashCode();

return result + age;

3) return super.hashCode();

现在要把Worker 类放入HashSet 中,并希望在HashSet 中没有重复元素,则下面说法正 确的是:C

A. 三种写法都正确

B. 1), 2)写法正确,2)效率更高

C. 2)写法正确,1),3)写法都不正确

7. (Set,Hash 算法,方法覆盖)代码改错

import java.util.*;

class Worker{

String name;

int age;

double salary;

public Worker(){}

public Worker(String name, int age, double salary){

this.name = name;

this.age = age;

this.salary = salary;

}

public int hashCode(){ //重写父类方法,权限不能小于父类

return name.hashCode() + age + salary;

}

public boolean equals(Worker w){

if (w.name == name && w.salary == salary && w.age == age){

return true;

}else

return false;

}

}

public class TestWorker{

public static void main(String args[]){

Set set = new HashSet();

set.add(new Worker(“tom”, 18, 2000));

set.add(new Worker(“tom”, 18, 2000));

set.add(0, new Worker(“jerry”, 18, 2000));// HashSet是无序的集合,不能在指定位置添加

System.out.println(set.size());

}

}

8. (Set,Hash 算法)在前面的Worker 类基础上,为Worker 类增加相应的方法,使得Worker放入HashSet 中时,Set 中没有重复元素。

并编写相应的测试代码。

9. (Set,Comparable 接口)在前面的Worker 类基础上,为Worker 类添加相应的代码, 使得Worker 对象能正确放入TreeSet 中。并编写相应的测试代码。

注:比较时,先比较工人年龄大小,年龄小的排在前面。如果两个工人年龄相同,则再 比较其收入,收入少的排前面。如果年龄和收入都相同,则根据字典顺序比较工人姓名。例 如:有三个工人,基本信息如下:

姓名 年龄 工资

zhang3 18 1500

li4 18 1500

wang5 18 1600

zhao6 17 2000

放入TreeSet 排序后结果为:

zhao6 li4 zhang3 wang5

10. (Map)关于下列Map 接口中常见的方法

put 方法表示放入一个键值对,如果键已存在则________________,如果键不存在则 ______________。

remove 方法接受___个参数,表示__________________。

get 方法表示_______________________,get 方法的参数表示______,返回值表示_____。 要想获得Map 中所有的键,应该使用方法___________,该方法返回值类型为_______。 要想获得Map 中所有的值,应该使用方法___________,该方法返回值类型为_______。 要想获得Map 中所有的键值对的集合,应该使用方法___________,该方法返回一个 _______类型所组成的Set。

11. (Map)利用Map,完成下面的功能:

从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。

附:世界杯冠军以及对应的夺冠年份,请参考本章附录。

12. (Map)已知某学校的教学课程内容安排如下:

完成下列要求:

1) 使用一个Map,以老师的名字作为键,以老师教授的课程名作为值,表示上述 课程安排。

2) 增加了一位新老师Allen 教JDBC

3) Lucy 改为教CoreJava

4) 遍历Map,输出所有的老师及老师教授的课程

5) *利用Map,输出所有教JSP 的老师。

13. (泛型)使用泛型,改写第5 题

14. (泛型)使用泛型和Map.Entry 接口,改写第12 题的前4 问

15. *(List)写出下面程序的输出结果

import java.util.*;

class MyClass{

int value;

public MyClass(){}

public MyClass(int value){ this.value = value; }

public String toString(){

return “”+value;

}

}

public class TestList{

public static void main(String args[]){

MyClass mc1 = new MyClass(10);

MyClass mc2 = new MyClass(20);

MyClass mc3 = new MyClass(30);

List list = new ArrayList();

list.add(mc1);

list.add(mc2);

list.add(mc3);

MyClass mc4 = (MyClass) list.get(1);

mc4.value = 50;

for(int i = 0; i

System.out.println(list.get(i));

}

}

}

16. *(Set,HashSet,空指针)有下面代码

import java.util.*;

class Student {

int age;

String name;

public Student(){}

public Student(String name, int age){

this.name = name;

this.age = age;

}

public int hashCode(){

return name.hashCode() + age;

}

public boolean equals(Object o){

if (o == null)

return false;

if (o == this)

return true;

if (o.getClass() != this.getClass())

return false;

Student stu = (Student) o;

if (stu.name.equals(name) && stu.age == age)

return true;

else

return false;

}

}

public class TestHashSet{

public static void main(String args[]){

Set set = new HashSet();

Student stu1 = new Student();

Student stu2 = new Student(“Tom”, 18);

Student stu3 = new Student(“Tom”, 18);

set.add(stu1);

set.add(stu2);

set.add(stu3);

System.out.println(set.size());

}

}

下列说法正确的是:

A. 编译错误

B. 编译正确,运行时异常

C. 编译运行都正确,输出结果为3

D. 编译运行都正确,输出结果为2

17. *(Set)有如下两个类(只写了类的属性,请自行添加相应的构造方法和get/set 方法)

要求,完善Worker 和Address 类,使得Worker 对象能够正确放入HashSet 中:即将 Worker 放入HashSet 中时不会出现重复元素。并编写相应测试代码。

18. *(Map)在原有世界杯Map 的基础上,增加如下功能:

读入一支球队的名字,输出该球队夺冠的年份列表。

例如,读入“巴西”,应当输出

1958 1962 1970 1994 2002

读入“荷兰”,应当输出

没有获得过世界杯

19. *(Map)设计Account 对象如下:

要求完善设计,使得该Account 对象能够自动分配id。

给定一个List 如下:

List list = new ArrayList();

list.add(new Account(10.00, “1234”));

list.add(new Account(15.00, “5678”));

list.add(new Account(0, “1010”));

要求把List 中的内容放到一个Map 中,该Map 的键为id,值为相应的Account 对象。 最后遍历这个Map,打印所有Account 对象的id 和余额。

20. *(List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列。 例如:

List list = new ArrayList();

list.add(“Hello”);

list.add(“World”);

list.add(“Learn”); //此时list 为Hello World Learn

reverseList(list);

//调用reverseList 方法之后,list 为Learn World Hello

21. **(Map,Hash 算法)有如下代码:

import java.util.*;

class MyKey{

int keyValue;

public MyKey(){}

public MyKey(int value){

this.keyValue = value;

}

}

class MyValue{

String value;

public MyValue(){}

public MyValue(String value){

this.value = value;

}

public String toString(){

return value;

}

}

public class TestMap{

public static void main(String args[]){

Map map = new HashMap();

MyKey key1 = new MyKey(10);

map.put(key1, new MyValue(“abc”));

map.put(new MyKey(10), new MyValue(“cde”));

System.out.println(map.get(key1));

System.out.println(map.size());

}

}

写出该代码的输出结果。

22. **(Id,hashCode,equals)为Worker 类增加id 属性,用来唯一标识一个员工。即:如果员工的id 不同,则不管其姓名、年龄、工资是否相同,都认为是不同的员工。部分代 码如下:

class Worker{

private final Long id;

private String name;

private double salary;

private int age;

//构造方法„

//get/set 方法„

public boolean equals(Object obj){

//1 此处仅判断id 是否相同

}

public int hashCode(){

//2 此处返回hashCode

}

}

要求:

1) 完善构造方法和get/set 方法。要求自动分配Worker 的id

2) 完善equals 方法。要求仅判断id 是否相同

3) //2 处,如果写成

return (int)(name.hashCode() + id.hashCode() + age + salary);

是否正确?为什么?

23. **(综合)有如下Student 对象

其中,classNum 表示学生的班号,例如“class05”。

有如下List

List list = new ArrayList();

list.add(new Student(“Tom”, 18, 100, “class05”));

list.add(new Student(“Jerry”, 22, 70, “class04”));

list.add(new Student(“Owen”, 25, 90, “class05”));

list.add(new Student(“Jim”, 30,80 , “class05”));

list.add(new Student(“Steve”, 28, 66, “class06”));

list.add(new Student(“Kevin”, 24, 100, “class04”));

在这个list 的基础上,完成下列要求:

1) 计算所有学生的平均年龄

2) 计算各个班级的平均分

24. **(综合)已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。

注:参赛球队列表见附录

注2:使用Math.random 来产生随机数。

25. **(综合)写一个MyStack 类,表示“栈”这种数据结构。

栈在表示上,就如同一个单向开口的盒子,每当有新数据进入时,都是进入栈顶。其基 本操作为push 和pop。push 表示把一个元素加入栈顶,pop 表示把栈顶元素弹出。 示意图如下:

栈的特点:先进后出。

栈的基本操作:

1) push(Object o):表示把元素放入栈

2) Object pop():返回栈顶元素,并把该元素从栈中删除。如果栈为空,则返回 null 值

3) Object peek():返回栈顶元素,但不把该元素删除。如果栈为空,则返回null值。

4) boolean isEmpty():判断该栈是否为空

5) int size():返回该栈中元素的数量

要求:

1) 利用List,实现栈。

2) 讨论:应当用ArrayList 作为实现类还是用LinkedList?为什么?

附录

1. 截止到2009 年为止,历届世界杯冠军

2. 2008 北京奥运会男足参赛国家:

科特迪瓦,阿根廷,澳大利亚,塞尔维亚,荷兰,尼日利亚、日本,美国,中国,新西 兰,巴西,比利时,韩国,喀麦隆,洪都拉斯,意大利

1. 填空

Collection 接口的特点是元素是___对象______;

List 接口的特点是元素__有___(有|无)顺序,___不可以___(可以|不可以)重复; Set 接口的特点是元素__无___(有|无)顺序,__可以____(可以|不可以)重复;

Map 接口的特点是元素是_键值对_____,其中_值____可以重复,____键__不可以重复。

2. (List)有如下代码

import java.util.*;

public class TestList{

public static void main(String args[]){

List list = new ArrayList();

list.add(“Hello”);

list.add(“World”);

list.add(1, “Learn”);

list.add(1, “Java”);

printList(list);

}

public static void printList(List list){

System.out.prinltn(list);

}

}

要求:

1) 把//1 处的代码补充完整,要求输出list 中所有元素的内容

2) 写出程序执行的结果

Hello Java Learn World

3) 如果要把实现类由ArrayList 换为LinkedList,应该改哪里?ArrayList 和

LinkedList 使用上有什么区别?实现上有什么区别?

List list = new LinkedList();

LinkedList(更适用于频繁的插入、删除操作)

4) 如果要把实现类由ArrayList 换为Vector,应该改哪里?ArrayList 和Vector 使 用上有什么区别?实现上有什么区别?

List list = new Vector();

Vector(古老的实现类、线程安全的,但效率要低于ArrayList)

3. (List)写出下面程序的运行结果

import java.util.*;

public class TestList{

public static void main(String args[]){

List list = new ArrayList();

list.add(“Hello”);

list.add(“World”);

list.add(“Hello”);

list.add(“Learn”);

list.remove(“Hello”);

list.remove(0);

for(int i = 0; i

System.out.println(list.get(i));

}

}

}

World Learn

4. (Set,List)

import java.util.*;

public class TestListSet{

public static void main(String args[]){

List list = new ArrayList();

list.add(“Hello”);

list.add(“Learn”);

list.add(“Hello”);

list.add(“Welcome”);

Set set = new HashSet();

set.addAll(list);

System.out.println(set.size());

}

}

选择正确答案A

A. 编译不通过

B. 编译通过,运行时异常

C. 编译运行都正常,输出3

D. 编译运行都正常,输出4

5. (List)已知有一个Worker 类如下:

public class Worker {

private int age;

private String name;

private double salary;

public Worker (){}

public Worker (String name, int age, double salary){

this.name = name;

this.age = age;

this.salary = salary;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public double getSalary(){

return salary;

}

public void setSalary(double salary){

this.salary = salary;

}

public void work(){

System.out.println(name + “ work”);

}

}

完成下面的要求

1) 创建一个List,在List 中增加三个工人,基本信息如下:

姓名 年龄 工资

zhang3 18 3000

li4 25 3500

wang5 22 3200

ArrayList L=new ArrayList();

L.add(new Worker(zhang3,18,3000));

L.add(new Worker(li4,25,3500));

L.add(new Worker(wang5,22,3200));

2) 在li4 之前插入一个工人,信息为:姓名:zhao6,年龄:24,工资3300

L.add(1,new Worker(zhao6,24,330));

3) 删除wang5 的信息

L.remove(3);

4) 利用for 循环遍历,打印List 中所有工人的信息

先在Worker类中重写toString方法

for(int i=0;i

Syso(L.get(i));

5) 利用迭代遍历,对List 中所有的工人调用work 方法。

Iterator it=L.iterator();

while(it.hasNext()){

System.out.println(it.next());

}

6) 为Worker 类添加equals 方法

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false; Worker other = (Worker) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true;

6. (Set,Hash 算法)为上一题的Worker 类,在添加完equals 方法的基础上,添加一个 hashCode 方法。

public int hashCode(){

//1

}

有几种写法:

1) return 0;

2)

int result = 0;

if (name != null) result = name.hashCode();

return result + age;

3) return super.hashCode();

现在要把Worker 类放入HashSet 中,并希望在HashSet 中没有重复元素,则下面说法正 确的是:C

A. 三种写法都正确

B. 1), 2)写法正确,2)效率更高

C. 2)写法正确,1),3)写法都不正确

7. (Set,Hash 算法,方法覆盖)代码改错

import java.util.*;

class Worker{

String name;

int age;

double salary;

public Worker(){}

public Worker(String name, int age, double salary){

this.name = name;

this.age = age;

this.salary = salary;

}

public int hashCode(){ //重写父类方法,权限不能小于父类

return name.hashCode() + age + salary;

}

public boolean equals(Worker w){

if (w.name == name && w.salary == salary && w.age == age){

return true;

}else

return false;

}

}

public class TestWorker{

public static void main(String args[]){

Set set = new HashSet();

set.add(new Worker(“tom”, 18, 2000));

set.add(new Worker(“tom”, 18, 2000));

set.add(0, new Worker(“jerry”, 18, 2000));// HashSet是无序的集合,不能在指定位置添加

System.out.println(set.size());

}

}

8. (Set,Hash 算法)在前面的Worker 类基础上,为Worker 类增加相应的方法,使得Worker放入HashSet 中时,Set 中没有重复元素。

并编写相应的测试代码。

9. (Set,Comparable 接口)在前面的Worker 类基础上,为Worker 类添加相应的代码, 使得Worker 对象能正确放入TreeSet 中。并编写相应的测试代码。

注:比较时,先比较工人年龄大小,年龄小的排在前面。如果两个工人年龄相同,则再 比较其收入,收入少的排前面。如果年龄和收入都相同,则根据字典顺序比较工人姓名。例 如:有三个工人,基本信息如下:

姓名 年龄 工资

zhang3 18 1500

li4 18 1500

wang5 18 1600

zhao6 17 2000

放入TreeSet 排序后结果为:

zhao6 li4 zhang3 wang5

10. (Map)关于下列Map 接口中常见的方法

put 方法表示放入一个键值对,如果键已存在则________________,如果键不存在则 ______________。

remove 方法接受___个参数,表示__________________。

get 方法表示_______________________,get 方法的参数表示______,返回值表示_____。 要想获得Map 中所有的键,应该使用方法___________,该方法返回值类型为_______。 要想获得Map 中所有的值,应该使用方法___________,该方法返回值类型为_______。 要想获得Map 中所有的键值对的集合,应该使用方法___________,该方法返回一个 _______类型所组成的Set。

11. (Map)利用Map,完成下面的功能:

从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。

附:世界杯冠军以及对应的夺冠年份,请参考本章附录。

12. (Map)已知某学校的教学课程内容安排如下:

完成下列要求:

1) 使用一个Map,以老师的名字作为键,以老师教授的课程名作为值,表示上述 课程安排。

2) 增加了一位新老师Allen 教JDBC

3) Lucy 改为教CoreJava

4) 遍历Map,输出所有的老师及老师教授的课程

5) *利用Map,输出所有教JSP 的老师。

13. (泛型)使用泛型,改写第5 题

14. (泛型)使用泛型和Map.Entry 接口,改写第12 题的前4 问

15. *(List)写出下面程序的输出结果

import java.util.*;

class MyClass{

int value;

public MyClass(){}

public MyClass(int value){ this.value = value; }

public String toString(){

return “”+value;

}

}

public class TestList{

public static void main(String args[]){

MyClass mc1 = new MyClass(10);

MyClass mc2 = new MyClass(20);

MyClass mc3 = new MyClass(30);

List list = new ArrayList();

list.add(mc1);

list.add(mc2);

list.add(mc3);

MyClass mc4 = (MyClass) list.get(1);

mc4.value = 50;

for(int i = 0; i

System.out.println(list.get(i));

}

}

}

16. *(Set,HashSet,空指针)有下面代码

import java.util.*;

class Student {

int age;

String name;

public Student(){}

public Student(String name, int age){

this.name = name;

this.age = age;

}

public int hashCode(){

return name.hashCode() + age;

}

public boolean equals(Object o){

if (o == null)

return false;

if (o == this)

return true;

if (o.getClass() != this.getClass())

return false;

Student stu = (Student) o;

if (stu.name.equals(name) && stu.age == age)

return true;

else

return false;

}

}

public class TestHashSet{

public static void main(String args[]){

Set set = new HashSet();

Student stu1 = new Student();

Student stu2 = new Student(“Tom”, 18);

Student stu3 = new Student(“Tom”, 18);

set.add(stu1);

set.add(stu2);

set.add(stu3);

System.out.println(set.size());

}

}

下列说法正确的是:

A. 编译错误

B. 编译正确,运行时异常

C. 编译运行都正确,输出结果为3

D. 编译运行都正确,输出结果为2

17. *(Set)有如下两个类(只写了类的属性,请自行添加相应的构造方法和get/set 方法)

要求,完善Worker 和Address 类,使得Worker 对象能够正确放入HashSet 中:即将 Worker 放入HashSet 中时不会出现重复元素。并编写相应测试代码。

18. *(Map)在原有世界杯Map 的基础上,增加如下功能:

读入一支球队的名字,输出该球队夺冠的年份列表。

例如,读入“巴西”,应当输出

1958 1962 1970 1994 2002

读入“荷兰”,应当输出

没有获得过世界杯

19. *(Map)设计Account 对象如下:

要求完善设计,使得该Account 对象能够自动分配id。

给定一个List 如下:

List list = new ArrayList();

list.add(new Account(10.00, “1234”));

list.add(new Account(15.00, “5678”));

list.add(new Account(0, “1010”));

要求把List 中的内容放到一个Map 中,该Map 的键为id,值为相应的Account 对象。 最后遍历这个Map,打印所有Account 对象的id 和余额。

20. *(List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列。 例如:

List list = new ArrayList();

list.add(“Hello”);

list.add(“World”);

list.add(“Learn”); //此时list 为Hello World Learn

reverseList(list);

//调用reverseList 方法之后,list 为Learn World Hello

21. **(Map,Hash 算法)有如下代码:

import java.util.*;

class MyKey{

int keyValue;

public MyKey(){}

public MyKey(int value){

this.keyValue = value;

}

}

class MyValue{

String value;

public MyValue(){}

public MyValue(String value){

this.value = value;

}

public String toString(){

return value;

}

}

public class TestMap{

public static void main(String args[]){

Map map = new HashMap();

MyKey key1 = new MyKey(10);

map.put(key1, new MyValue(“abc”));

map.put(new MyKey(10), new MyValue(“cde”));

System.out.println(map.get(key1));

System.out.println(map.size());

}

}

写出该代码的输出结果。

22. **(Id,hashCode,equals)为Worker 类增加id 属性,用来唯一标识一个员工。即:如果员工的id 不同,则不管其姓名、年龄、工资是否相同,都认为是不同的员工。部分代 码如下:

class Worker{

private final Long id;

private String name;

private double salary;

private int age;

//构造方法„

//get/set 方法„

public boolean equals(Object obj){

//1 此处仅判断id 是否相同

}

public int hashCode(){

//2 此处返回hashCode

}

}

要求:

1) 完善构造方法和get/set 方法。要求自动分配Worker 的id

2) 完善equals 方法。要求仅判断id 是否相同

3) //2 处,如果写成

return (int)(name.hashCode() + id.hashCode() + age + salary);

是否正确?为什么?

23. **(综合)有如下Student 对象

其中,classNum 表示学生的班号,例如“class05”。

有如下List

List list = new ArrayList();

list.add(new Student(“Tom”, 18, 100, “class05”));

list.add(new Student(“Jerry”, 22, 70, “class04”));

list.add(new Student(“Owen”, 25, 90, “class05”));

list.add(new Student(“Jim”, 30,80 , “class05”));

list.add(new Student(“Steve”, 28, 66, “class06”));

list.add(new Student(“Kevin”, 24, 100, “class04”));

在这个list 的基础上,完成下列要求:

1) 计算所有学生的平均年龄

2) 计算各个班级的平均分

24. **(综合)已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。

注:参赛球队列表见附录

注2:使用Math.random 来产生随机数。

25. **(综合)写一个MyStack 类,表示“栈”这种数据结构。

栈在表示上,就如同一个单向开口的盒子,每当有新数据进入时,都是进入栈顶。其基 本操作为push 和pop。push 表示把一个元素加入栈顶,pop 表示把栈顶元素弹出。 示意图如下:

栈的特点:先进后出。

栈的基本操作:

1) push(Object o):表示把元素放入栈

2) Object pop():返回栈顶元素,并把该元素从栈中删除。如果栈为空,则返回 null 值

3) Object peek():返回栈顶元素,但不把该元素删除。如果栈为空,则返回null值。

4) boolean isEmpty():判断该栈是否为空

5) int size():返回该栈中元素的数量

要求:

1) 利用List,实现栈。

2) 讨论:应当用ArrayList 作为实现类还是用LinkedList?为什么?

附录

1. 截止到2009 年为止,历届世界杯冠军

2. 2008 北京奥运会男足参赛国家:

科特迪瓦,阿根廷,澳大利亚,塞尔维亚,荷兰,尼日利亚、日本,美国,中国,新西 兰,巴西,比利时,韩国,喀麦隆,洪都拉斯,意大利


相关文章

  • 高一集合练习题
  • 一.填空题 1.集合{1,2,3}的真子集共有______________. (A )5个 (B )6个 (C )7个 (D )8个 222.已知集合A={x x -2≥0} B={x x -4x +3≤0}则A ⋃B =_________ ...查看


  • 中职数学第一章 集合练习题
  • 中职数学第一章 集合练习题 一,选择题(每题只有1个正确答案,请将正确答案写在括号内.) 1. 下列对象不能构成集合的是() A. 比较小的数 B.平方等于9的数 C. 所有的三角形 D.16级的所有同学 2. 已知集合A ={0,3} , ...查看


  • 必修一数学集合教案
  • 课题:集合的含义与表示(1) 课 型:新授课 教学目标: (1) 了解集合.元素的概念,体会集合中元素的三个特征: (2) 理解元素与集合的"属于"和"不属于"关系: (3) 掌握常用数集及其记法: ...查看


  • 集合的概念教案
  • 1.1.1集合的概念(必修1) 一.教学目标 1.知识技能目标: (1)初步理解集合的概念,集合元素的三个特征,知道常用数集及其记法. (2)初步了解"属于"关系的意义. (3)初步了解有限集.无限集.空集的意义. 2. ...查看


  • 高中数学集合练习题
  • 集合 1:设集合A{x|x4},msin40,则下列关系中正确的是( ) A.mA B.mA C.{m}A D.{m} A 2:设集合A1,2,3,4,B3,4,5,全集UAB, 则集合CUAB中的元素 ...查看


  • 集合的概念与集合关系练习题及答案
  • 高一数学周测试题2014.07.22 一.选择题(每题3分, 共30分) 1.给出下列关系: ① 1R:② 2Q:③3 N:④Q. ). D.4个 ( ) 其中正确的个数为( A.1个 B.2个 C.3个 2.满足条件{1,2,3} ...查看


  • 人教版高一必修1数学教案:精品全套
  • 人教版高中数学必修1精品教案(整套) 课题:集合的含义与表示(1) 课 型:新授课 教学目标: (1) 了解集合.元素的概念,体会集合中元素的三个特征: (2) 理解元素与集合的"属于"和"不属于"关 ...查看


  • 集合练习题(含答案)
  • 第一讲 集合 集合基础知识简单回顾 1. 摩根定律 2. 子集个数的证明 3. 数形结合思想的运用 一. 集合中的常规题 1 .(2013山东)已知集合A .B 均为全集U ={1, 2, 3, 4}的子集, 且 ( ) D .∅ ( ) ...查看


  • 集合的概念及表示练习题及答案
  • 集合的含义及其表示 姓名:_________ 一.选择题: 1. 下面四个命题:(1)集合N 中的最小元素是1:(2)若-a ∉N ,则a ∈N (3) x 2+4=4x 的解集为{2,2}:(4)0.7∈Q ,其中不正确命题的个数为 ( ...查看


  • 集合的概念及表示练习题及答案 1
  • 1.1.1 集合的含义及其表示 姓名: 一.选择题: 1. 下面四个命题:(1)集合N 中的最小元素是1:(2)若-a ∉N ,则a ∈N (3)x 2 +4=4x 的解集为{2,2}:(4)0.7∈Q ,其中不正确命题的个数为 ( ) A ...查看


热门内容