java实验(7) Java中List集合及其应用

一、实验内容

1、编写程序:循环接收用户从键盘输入的多个字符串,直到输入“end”时循环结束,并将所有已输入的字符串按字典顺序倒序打印。

输入案例:

hello

world

hello

JAVA

end

输出案例:

world hello hello JAVA

package ShiYan7;
import java.util.*;
public class JavaTest02 {
    public static void main(String[] args) {

        TreeSet<String> str = new TreeSet<String>(new Comparator<String>() {
            public int compare(String s1, String s2) {
                int num = s2.compareTo(s1);
                return num == 0 ? 1 :num;
            }
        });
        Scanner sc = new Scanner(System.in);
        while(true){
            String line = sc.nextLine();
            if("end".equals(line)){
                break;
            }
            str.add(line);
        }
        for (String string : str) {
            System.out.print(string+" ");
        }
    }

}

2、编写程序:有m个人围成一个圈,从1开始报数,报到n的这个人就要退出。然后其他人重新开始从1报数,到n退出。问:最后剩下的是m人中的第几个人。(m>n)

输入案例:100 14

输出案例:最后剩下的是100人中的第92个人

package ShiYan7;
import java.util.Scanner;
import java.util.ArrayList;
public class JavaTest03 {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int x=sc.nextInt();
        for (int i = 1; i <= n; i++) {
            list.add(i);
        }
        int count = 1;
        for (int i = 0; list.size() != 1; i++) {

            if (i == list.size()) {
                i = 0;
            }
            if (count % x == 0) {
                list.remove(i--);
            }
            count++;
        }
        System.out.println("最后剩下的是"+n+"人中的第"+list.get(0)+"个人");
    }
}

3、编写程序:某班有40个学生,学号为2020042901-2020042940,全部参加Java集合阶段检测,给出所有同学的成绩(可随机产生,范围为60-100),请编写程序将本班各位同学成绩从高往低排序打印输出。

PS:成绩相同时学号较小的优先打印,打印的信息包含学号和成绩。

(注:直接在输入框中输入文字形式的代码,粘贴运行结果截图,不要上传文件)

package ShiYan7;
import java.util.*;
/**
 * 描述:从大到小打印学生的:学号+姓名+成绩
 *

 */
public class JavaTest1 {
    public static void main(String[] args) {
        initData();
        adjust();
    }
    private static List<Student> data = new ArrayList<Student>();
    static class Student{
        private int id;
        private String name;
        private int score;

        public Student(int id,String name,int score){
            this.id = id;
            this.name = name;
            this.score = score;
        }
        public int getId() {
            return id;
        }
        public String getName() {
            return name;
        }
        public int getScore() {
            return score;
        }

        public String toString() {
            return "学号:" + id +
                    ", 姓名:" + name  +
                    " ,Java集合阶段检测:" + score ;
        }
    }
    public static void initData(){
        int j = 10;
        Random random = new Random();
        for (int i = 0;i < 40;++i){
            data.add(new Student(2020042901+i,"同学"+(i+j),random.nextInt(40)+61));
        }
    }
    public static void adjust(){
        PriorityQueue<Student> queue = new PriorityQueue<Student>(11, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                if (o1.getScore() == o2.getScore()) {
                    return o1.getId() - o2.getId();
                }
                return o2.getScore() - o1.getScore();
            }
        });
        Iterator<Student> iterator1 = data.iterator();
        while (iterator1.hasNext()){
            queue.add(iterator1.next());
        }

        for (int i = 0; i < 40; i++) {
            System.out.println(queue.remove());
        }
    }
    public static void print(){
        Iterator<Student> iterator = data.iterator();
        while (iterator.hasNext()){
            Student next1 = iterator.next();
            int id = next1.getId();
            String name = next1.getName();
            int score = next1.getScore();
            System.out.println("学号:"+id+" 姓名:"+name+" ,Java集合阶段检测:"+score);
        }
    }
}

二、实验结果与分析(包括:输入数据、输出数据、程序效率及正确性等)(此处写清题号与其答案,可截图)

  1. 程序运行结果截图如下:

  1. 程序运行结果截图如下:

  1. 程序运行结果截图如下:

五、问题与讨论

1.ArrayList(数组)

ArrayList是最常用的List实现类,内部通过数组实现,它允许对元素进行快速的随机访问,数组的缺点就是每一个元素之间不能有间隔,当数组的大小不满足时需要进行扩容,就要将已经有的数组的数据复制到新的存储空间中。当ArrayList的中间位置插入或者删除元素时,需要对数组进行复制,移动,代价比较高。因此他适合遍历不适合插入和删除。

2.Vector(数组实现、线程同步)

Vector是数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写入引起的的不一致,但是实现线程同步花费很高,访问它比访问ArrayList慢。

3.LinkList(链表)

LinkedList是用链表实现存储数据,很适合数据的动态插入和删除,随机访问和遍历速度比较慢,另外,他还提供了List接口中没有定义的方法,专门用来操作表头和表尾元素,可以当作堆栈,队列和双向队列使用。

4.Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值