Java实验报告(十)|泛型与集合

题目一

(一)自定义泛型类MyStack,模拟数据结构中的“栈”,并测试。该类中至少包含以下方法:
(1)压栈的方法push()。
(2)弹栈的方法pop()。
(3)获取栈顶元素的方法peek()。
(4)获取栈中元素的个数的方法size()。
源程序:

import java.util.ArrayList;

public class TestStack {
    public static void main(String[] args) {
        MyStack<String> ms = new MyStack<>();
        ms.push("张三");
        ms.push("李四");
        ms.push("王五");
        ms.push("赵六");
        System.out.println("栈顶元素:"+ms.peek());
        System.out.println("栈空间大小:"+ms.getSize());
        ms.pop();
        ms.pop();
        System.out.println("栈顶元素:"+ms.peek());
        System.out.println("栈空间大小:"+ms.getSize());
    }

}

class MyStack<T> {
    ArrayList<T> arr = new ArrayList<>();

    //压栈的方法push()
    public void push(T data) {
        arr.add(data);
    }

    //弹栈的方法pop()
    public void pop() {
        arr.remove(arr.size() - 1);
    }

    //获取栈顶元素的方法peek()
    public T peek() {
        T data = arr.get(arr.size() - 1);
        return data;
    }

    //获取栈中元素的个数的方法size()
    public int getSize() {
        return arr.size();
    }
}

测试结果截图:
在这里插入图片描述

题目二

(二)有下面的ArrayList,并使用foreach和迭代器遍历此链表。
在这里插入图片描述
使用foreach遍历链表的源程序:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Vector;

public class Test02 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("java");
        list.add("python");
        list.add("c");
        list.add("c++");
        list.add("php");
        list.add("oc");
        //方法一 foreach
        for (String str : list
        ) {
            System.out.print(str + " ");
        }
    }
}

运行结果截图:
在这里插入图片描述
使用迭代器遍历链表的源程序:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Vector;

public class Test02 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("java");
        list.add("python");
        list.add("c");
        list.add("c++");
        list.add("php");
        list.add("oc");     
        //方法二 迭代器
        System.out.println();
        Iterator<String> it = list.iterator();
        while (it.hasNext()){
            System.out.print(it.next()+" ");
        }
    }
}

运行结果截图:
在这里插入图片描述

题目三

(三)有下面的Map集合,使用两种方法遍历。
Map:
在这里插入图片描述
方法一源程序:

import java.util.Set;
import java.util.TreeMap;

public class Test03 {
    public static void main(String[] args) {

        TreeMap<Integer, String> map = new TreeMap<>();
        map.put(1, "Java");
        map.put(2, "Python");
        map.put(3, "C");
        map.put(4, "C++");
        map.put(5, "PHP");
        //方法一 keySet()
        Set<Integer> keys = map.keySet();
        for (Integer key : keys
        ) {
            System.out.println(key+":" +map.get(key));
        }
    }
}

运行结果截图:
在这里插入图片描述
方法二源程序:

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class Test03 {
    public static void main(String[] args) {

        TreeMap<Integer, String> map = new TreeMap<>();
        map.put(1, "Java");
        map.put(2, "Python");
        map.put(3, "C");
        map.put(4, "C++");
        map.put(5, "PHP");
        //方法二: entrySet()
        Set<Map.Entry<Integer, String>> entries = map.entrySet();
        for (Map.Entry<Integer, String> entry : entries){
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
    }
}

运行结果截图:
在这里插入图片描述

题目四

(四)双色球共有49个数字。其中红色球33个(数字从1-33),篮色球16个(数字从1-16)。编写一个程序,实现自动选号,每次选出一组号码(6个红色球和1个蓝色球)。
源程序:

import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class Test04 {
    public static Set<Integer> getNums(int n, int count) {
        HashSet<Integer> nums = new HashSet<>();
        Random r = new Random();
        while (true) {
            nums.add(r.nextInt(n) + 1);
            if (nums.size() == count) {
                break;
            }
        }
        return nums;
    }

    public static void main(String[] args) {
        System.out.println("红色球"+getNums(32,6));
        System.out.println("蓝色球"+getNums(32,6));
        System.out.println("绿色球"+getNums(32,6));
    }
}

运行结果截图:
在这里插入图片描述

收获:
1、 泛型、学会自定义泛型的定义以及应用。
2、通过arraylist模拟栈这种先进后出的数据结构,实现pop(),push(),peek(),getSize()等方法,并进行测试。
3、学会使用foreach和vector迭代器迭代输出数组中的元素。
4、泛型的好处1.类型安全2.能够避免在强转时出现问题
5、学会使用map里的keySet()和entrySet()方法。
6、了解掌握HashSet以及TreeSet的相关属性及其方法。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
掌握集合的概念、体系结构、分类及使用场景 2)了解Set接口及主要实现类(HashSet、TreeSet) 3)了解List接口及主要实现类(ArrayList、LinkedList、Vector) 4)了解Map接口及主要实现类(HashMap、TreeMap、HashTable) 二、实验内容及步骤 1、编写程序练习将以下5个Person类的对象放在一个HashSet中。 姓名:张三 身份证号:178880001 姓名:王五 身份证号:178880002 姓名:李四 身份证号:178880003 姓名:王五 身份证号:178880002 姓名:李四 身份证号:178880004 注意:因为Person类是自定义类,需要重写hashCode()方法和equals()方法,并规定只有姓名和身份证号都相等,则对象相等。 其中计算哈希码的算法:(31 + ((name == null) ? 0 : name.hashCode()))*31 + id (注:name:Person对象的姓名,id:Person对象的身份证号) 主方法中作如下测试: 1)创建一个可放置Person类对象的HashSet; 2)依次添加上述5个对象到HashSet中; 3)把集合中的元素打印出来(使用迭代器Iterator) 2、编写程序练习List集合的基本使用: 1) 创建一个只能容纳String对象名为names的ArrayList集合; 2)按顺序往集合中添加5个字符串对象:"张三"、"李四"、"王五"、"马六"、"赵七"; 3)对集合进行遍历,分别打印集合中的每个元素的位置与内容; 4)打印集合的大小,然后删除集合中的第3个元素,并显示删除元素的内容,然后再打印目前集合中第3个元素的内容,并再次打印集合的大小。 3、编写程序练习Map集合的基本使用: 1)创建一个只能容纳String对象的person的HashMap集合; 2)往集合中添加5个"键-值"对象: "id"-"1"; "name"-"张三"; "sex"-"男"; "age"-"25"; "hobby"-"爱学Java" 3)对集合进行遍历,分别打印集合中的每个元素的键与值; 4)打印集合的大小,然后删除集合中的键为age的元素,并显示删除元素的内容,并再次打印集合的大小。 四、思考题 1、集合中的List、Set、Map有哪些不同? 2、为什么使用集合框架,而尽可能少用数组作为存储结构? 3、如何使用TreeSet实现第一题?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值