JAVA实验-集合类的使用

实验一:

已知集合A={1,2,3,4,5},集合B={1,3,5,7,9},编写程序求A与B的交集、并集和差集。(使用HashSet,查阅JDK API文档)

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

public class HashSetDemo {
public static void main(String args[]) {
	HashSet<Integer> a = new HashSet<Integer>();//创建集合a
	HashSet<Integer> b = new HashSet<Integer>();//创建集合b
	//给a赋值
	for (int i=1;i<=5;i++) {
			a.add(i);
	}
	//给b赋值
	for(int i = 1;i<10;i+=2) {
		b.add(i);
	}
//求并集,存放在Union中
HashSet Union = new HashSet<>(a);//将a的值赋给Union
Union.addAll(b);
System.out.println(Union);
//求差集
HashSet difference = new HashSet<>(a);
difference.removeAll(b);
System.out.println(difference);
//求交集
HashSet intersection = new HashSet<>(a);
intersection.retainAll(b);
System.out.println(intersection);
}
}

实验二:

编写一个List集合,添加5个整型对象,获取索引为2的元素并打印输出,再获取其中1个元素的索引,再删除索引为3的元素。

import java.util.ArrayList;
import java.util.List;

public class ListDemo {
public static void main(String args[]) {
	List<Integer> ll = new ArrayList<Integer>();//创建一个整型链表
	//给链表赋值
	for (int i = 0;i<5;i++ ) {
		ll.add(i+2);
	}
	System.out.println("链表为:"+ll);
	//打印输出索引为2的元素
	System.out.println(ll.get(2));
	//获取值为4的索引
	System.out.println("元素为4的元素的位置在:"+ll.indexOf(4));
	//删除索引为3的元素
	ll.remove(3);
	//查看链表中的元素
	System.out.println("现在的链表为:"+ll);
}
}

实验三:

先设计一个类:Student,包含3个成员变量:学号、姓名、java成绩,用三个参数的构造方法给三个成员变量赋值。使用HashMap()创建一个“key-value”对集合,用来存放Student对象(数据如下表),每个Student对象用该对象的学号作为关键字(key),用迭代器遍历集合所有元素,输出java成绩80分以上元素,并统计元素个数。

姓名

学号

Java成绩

马云

9011

68

马化腾

9012

82

李彦宏

9013

90

刘强东

9014

55

周鸿祎

9015

98

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class HashMapDemo {
public static void main(String[] args){
    //创建Student数组
    Student1[] s = new Student1[]{
            new Student1("9011","马云",68),
            new Student1("9012","马化腾",82),
            new Student1("9013","李彦宏",90),
            new Student1("9014","刘强东",55),
            new Student1("9015","周鸿祎",98)
    };
    //创建HashMap
            Map<String,Student1> hashmap = new HashMap<String,Student1>();
            //给hashmap赋值
            for (Student1 i : s){
                hashmap.put(i.sno,i);
            }
    Iterator<String> iterator = hashmap.keySet().iterator();//创建迭代器
    int count = 0;//计数
    String no= "";//记录键
    while(iterator.hasNext()){//判断迭代器下一个是否为空
        no=iterator.next();//获取键
        if(hashmap.get(no).grade>=80){//判断该键对应的元素的成绩是否不低于80
            count++;//不低于八十则加一
            System.out.println("学号:"+no+",姓名:"+hashmap.get(no).name+",成绩:"+hashmap.get(no).grade);//输出不低于八十的学生信息
        }
    }
    System.out.println("成绩八十分以上的有:"+count+"个");
}
}
class Student1{//创建Student1类
        String sno;
        String name;
        int grade;
        Student1(String sno,String name,int grade){//三个参数的有参构造
            this.sno=sno;
            this.name=name;
            this.grade=grade;
        }
}

实验四:

Set集合元素不重复。编写学生类Student,该类有两个属性,no表示学号,name表示姓名。规定两个学生对象的学号相同,则两个对象的值相等。重写hashCode()方法将学号作为哈希码返回,重写equals()方法使学号相同且名字相同的两个对象值相等。写出测试类,满足相同的学生对象不能放入同一个Set集合里。 (使用HashSet

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

public class TestHashCode {
    public static void main(String[] args){
        Set<Student2> s = new HashSet<Student2>();//声明HashSet
        Student2[] s1= new Student2[]{//创建Student类型数组
                new Student2(1,"张三"),
                new Student2(2,"李四"),
                new Student2(3,"王五"),
                new Student2(2,"李四")
        };
       for (Student2 i :s1){//给HashSet赋值
           s.add(i);
        }
        System.out.println(s.size());//输出s的个数
    }
}
class Student2{//创建Student
    int  no;
    String name;
    Student2(){//无参构造

    }
    Student2(int no,String name){//有参构造
        this.no=no;
        this.name=name;
    }

    @Override
    public int hashCode() {//重写hashCode方法,以学号来算
        return no;
    }

    @Override
    public boolean equals(Object obj) {//重写equals方法,姓名和学号相同
        Student2 s = (Student2) obj;
        return no==s.no&&name.equals(s.name);
    }
}

约瑟夫问题

有500个小朋友拉成一个圆圈,从其中一个小朋友开始依次编号1-500,从1号小朋友开始循环1-3报数,数到3的小朋友就退出。编写一个Java应用程序,打印输出依次退出小朋友的编号?(使用LinkedList)

 输出结果校验数据:

最后退出的10位小朋友编码为:

 40925206367106335133481268436

import java.util.LinkedList;

public class Joseph {
    public static void main(String[] args){
        LinkedList<Integer> link = new LinkedList<Integer>();//创建一个整型集合
        for(int i = 0 ;i<500;i++){//给每个位置的编号
            link.add(i+1);
        }
        int i = 0;
        int count = 1;//计数
        while(link.size()>1){//集合的个数大于1个则继续循环
            if(i>link.size()-1){//判断当前有无出界
                i=0;//出界则重新开始新的一圈
            }
            if(count==3){//判断这个人是否出界
                System.out.println(link.get(i)+"号出列");
                link.remove(i);//移除这个人
                if(i> link.size()-1){//判断移除后是否出界,
                    i=0;//出界则重新开始一轮
                }
                count=1;//重新开始计数
            }
            i++;//下标后移
            count++;//下一个人报的数
        }
        System.out.println("最后一个出列的是"+link.get(0));
    }
}

统计次数:

随机产生范围在[1,50]的100个整数,并统计出每个整数出现的次数,请写出完整的java代码。(使用HashMap)

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Random;

public class TestHashMap {
    public static void main(String[] args){
        int[] arr = new int[100];//创建一个存放随机整数的数组
        Map<Integer,Integer> random = new HashMap<Integer,Integer>();//创建一个整型的HashMap
        Random r = new Random();//创建一个随机数对象
        for(int i = 0;i<100;i++){//数组赋值
            int number = r.nextInt(1,51);
            arr[i]=number;
            System.out.println(arr[i]);//查看数组中的元素
        }
        for (int i :arr){
            Integer  integer = random.get(i);//查看random中是否以及存在i这个值
            if(integer==null){//如果不存在,则将此值放入HashMap中
                random.put(i,1);
            }
            else//存在则计数加一
                random.put(i,integer+1);
        }
        System.out.println(random);//输出查看各个整数出现的次数
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值