List、Set接口基础知识题

目录

1.请简述List接口的特点

2.请简述HashSet去除重复元素的原理

3.简述常见的数据结构中元素的存取特点

4.简述Comparable和Comparator两个接口的区别

5.LinkedList使用

6.LinkedHashSet的使用

 7.HashSet的使用



1.请简述List接口的特点

  • 它是一个元素存取有序的集合。
  • 它是一个带有索引的集合,通过索引可以精准的操作集合中的元素。
  • 集合中可以有重复的元素,可通过元素的equals方法来比较是否为重复的元素。

2.请简述HashSet去除重复元素的原理

  1. 首先调用被添加元素的hashCode()方法,与HashSet中已有元素的hashCode比较较是否相同
  2. 如果不相同,直接存储
  3. 如果相同,调用equals方法比较是否相同
  4. 不相同,直接存储元素
  5. 相同,则认为是同一元素,不存储

3.简述常见的数据结构中元素的存取特点

  • 栈:stack,又称堆栈,元素的存取特点为先进后出。
  • 队列:queue,简称队,元素的存取特点为先进先出。
  • 数组:Array,是有序的元素序列,元素的存取特点为:

               1、查找元素快:可直接通过索引快速访问指定位置的元素

               2、增删元素慢

  • 链表:Linked list,特点为:

               1、多个结点之间,通过地址进行连接。

               2、查找元素慢

               3、增删元素快


4.简述Comparable和Comparator两个接口的区别

  • Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
  • Comparator:强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。

5.LinkedList使用

已知数组存放一批QQ号码,QQ号码最长为11位,最短为5位String[] strs = {"12345","67891","12347809933","98765432102","67891","12347809933"}。

将该数组里面的所有qq号都存放在LinkedList中,将list中重复元素删除,将list中所有元素分别用迭代器和增强for循环打印出来。

//定义QQ号码数组
        String[] stars = 
        {"12345","67891","12347809933","98765432102","67891","12347809933"};
        LinkedList<String> qqList = new LinkedList();

        //遍历stars获取QQ号码
        for(String qq : stars){
            //如果LinkedList不存在这个元素,则添加
            if(!qqList.contains(qq)){
                qqList.add(qq);
            }
        }
        //迭代器遍历
        Iterator< String> iterator = qqList.iterator();
        while (iterator.hasNext()) {
            String string = iterator.next();
            System.out.println(string);
        }
        System.out.println("————————————");
        //增强for循环遍历
        for(Object qq : qqList){
            System.out.println(qq);
        }

执行结果为:

 


6.LinkedHashSet的使用

键盘录入一个字符串,去掉其中重复字符,打印出不同的那些字符,必须保证顺序。例如输入:aaaabbbcccddd,打印结果为:abcd。

        //创建Scanner对象录入键盘输出的数据
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String s = scanner.nextLine();
        //创建LinkedHashSet来去除重复的元素,并且保证迭代的顺序
        LinkedHashSet<Character> chs = new LinkedHashSet<>();
        //将字符串转换为char[]
        char[] charArray = s.toCharArray();
        //使用增强for循环遍历每个元素,并将字符添加到LinkedHashSet中
        for(char c : charArray){
            chs.add(c);
        }
        //使用增强for循环打印
        for(char c : chs){
            System.out.println(c);
        }

执行效果如图:


 7.HashSet的使用

双色球规则:双色球每注投注号码由6个红色球号码和1个蓝色球号码组成。红色球号码从1—33中选择;蓝色球号码从1—16中选择;请随机生成一注双色球号码。(要求同色号码不重复)

        //生成随机数
        Random ran = new Random();
        //创建HashSet来存储不重复的红球
        HashSet<Integer> hs = new HashSet<>();
        //while循环判断红球的数量是否小于6个
        while (hs.size() < 6) {
            //小于6个则产生一个红球,如果重复,则不添加,再次生成一个号码
            int num =ran.nextInt(33) + 1;
            hs.add(num);
        }
        //生成蓝球
        int buleBall = ran.nextInt(16) + 1;
        //增强for循环输出红球
        System.out.println("双色球中奖号码");
        System.out.println("红球是:");
        for(Integer redBall : hs){
            System.out.print(redBall +" ");
        }
        System.out.println();
        System.out.println("蓝球是:" + buleBall);

执行效果如下:


                                         你劝了所有人去休息 直到夜里只剩你自己

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

才疏学浅的小缘同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值