Java学习之路(四十五)| 集合(九)—— 集合练习题

各自努力,最高处见!加油!

1、倒叙遍历、截取字符串

在这里插入图片描述
练习代码:

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

public class Homework1 {
    public static void main(String[] args) {
        News news1 = new News("新冠确诊病例超千万,数百万印度教信徒赴恒河“圣欲”引民众担忧");
        News news2 = new News("男子突然想起2个月前钓的鱼还在网兜里,捞起一看赶紧放生");
        ArrayList arrayList = new ArrayList();
        arrayList.add(news1);
        arrayList.add(news2);

        //或者采用String类的substring(a,b);方法截取从a到b的元素(左闭右开)

        for (int i = arrayList.size()-1; i >= 0 ; i--) {
            News news=null;
            if (arrayList.get(i) instanceof News){
                news = (News)arrayList.get(i);
            }
            if (news!=null&&news.title.length()>15){
                char[] chars = news.title.toCharArray();
                for (int j=14;j<chars.length;j++){
                    if(j>14){
                        chars[j]=' ';
                    }else {
                        chars[j]='…';
                    }

                }
                System.out.println(chars);
            }else{
                System.out.println(news);
            }
//            System.out.println(news);
        }

    }
}

class News{
    String title;
    String  content;

    public News(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    @Override
    public String toString() {
        return "News{" +
                "title='" + title +
                '}';
    }
}

2、Map类型对象的遍历、修改、与Set的关系

在这里插入图片描述

3、试分析HashSet和TreeSet分别如何去重

  1. HashSet去重机制:hashCode()+equals(),底层先通过存入对象,进行运算得到一个hash值,通过hash值得到对应的索引,如果发现table索引所在的位置,没有数据,就直接存放。如果有数据,就进行equals比较(遍历比较)。比较后,链表中没有相同的元素,就加入,否则不加入。
    注意:程序员可以通过重写equals方法,决定相同元素的判定机制。
  2. TreeSet去重机制:如果你传入一个Comparator匿名对象,就使用实现的Comparator去重。如果方法返回0,就认为是相同元素/数据,就不添加。如果你没有传入一个Comparator匿名对象,则以你添加的对象实现的Compareable接口的compareTo方法去重。

4、下面代码运行会不会抛出异常,并从源码层面说明原因。(读源码+接口编程+动态绑定)

TreeSet treeSet=new TreeSet();
treeSet.add(new Person());

在这里插入图片描述
原因分析:因为在创建TreeSet对象的时候没有传入Comparator接口的匿名内部类,所以在底层Person转成Comparable类型没有成功,抛出异常。
在这里插入图片描述

解决方法:Person类继承Comparable类并实现compareTo方法。
问:上述代码中treeSet集合能加入多少个元素?
答:1个。
原因:在执行add方法时,会默认进入Person中的compareTo方法中进行比较,但在上述代码中compareTo方法返回0,代表后面加入的对象都是相同的对象,所以加入失败。

5、陷阱题

在这里插入图片描述
分析:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值