各自努力,最高处见!加油!
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);
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);
}
}
}
}
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分别如何去重
- HashSet去重机制:hashCode()+equals(),底层先通过存入对象,进行运算得到一个hash值,通过hash值得到对应的索引,如果发现table索引所在的位置,没有数据,就直接存放。如果有数据,就进行equals比较(遍历比较)。比较后,链表中没有相同的元素,就加入,否则不加入。
注意:程序员可以通过重写equals方法,决定相同元素的判定机制。 - 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、陷阱题
分析:
|