集合练习
七、练习
按要求实现:
(1)封装一个新闻类,包含标题和内容属性,提供get、set方法,重写toString方法,打印对象时只打印标题;
(2)只提供一个带参数的构造器,实例化对象时,只初始化标题;并且实例化两个对象:
新闻一:新冠确诊病例超干万,数百万印度教信徒赴恒河“圣浴”引民众担忧
新闻二:男子突然想起2个月前钓的鱼还在网兜里,捞起一看赶紧放生
(3)将新闻对象添加到ArrayList集合中,并且进行倒序遍历:(4)
(4)在遍历集合过程中,对新闻标题进行处理,超过15字的只保留前15个,然后在后边加 “ … ”
(5)在控制台打印遍历出经过处理的新闻标题;
public class HomeWork{
public static void main(String[] args){
ArrayList arrayList = new ArrayList();
arrayList.add(new News("新冠确诊病例超千万,数百万印度教信徒赴恒河\"圣浴\"引民众担忧"));
arrayList.add(new News("男子突然想起2个月前钓的鱼还在网兜里,捞起一看赶紧放生"));
int size = arrayList.size();
for (int i= size -1; i>= 0; i--){
News news = (News)arrayList.get(i);
System.out.println(processTitle(news.getTitle()));
}
}
//专门写一个方法处理显示新闻标题
public static String processTitle(String title){
if(title == null) {
return "";
}
if(title.length() > 15){
return title.substring(0, 15)+"..."; //[0,15)
} else
return title;
}
}
class News{
private String title;
private String content;
//get/set方法省略
//toString方法只需要title
}
试分析 HashSet 和 TreeSet 分别如何实现去重的
(1) HashSet的去重机制:hashCode() + equals() ,底层先通过存入对象,进行运算得到一个hash值,通过hash值得到对应的索引,如果发现table索引所在的位置,没有数据,就直接存放;如果有数据,就进行equals比较[遍历比较],如果比较后,不相同,就加入,否则就不加入.
(2)TreeSet的去重机制:如果你传入了一个 Comparator 匿名对象,就使用实现的compare去重,如果方法返回0,就认为是相同的元素/数据,就不添加;如果你没有传入一个 Comparator 匿名对象,则以你添加的对象实现的 Compareable 接口的 compareTo 去重.
下面两句是否会抛出异常
TreeSet treeSet = new TreeSet();//分析源码
treeSet.add(new Person());
//CLassCastException.
//add 方法,因为 TreeSet()构造器没有传入Comparator接口的匿名内部类
//所以在底层 Comparable<? super K> k=(Comparable<? super K>) key;
//即把 Perosn转成 Comparable类型,但无法转成功
//如果防止报错,需要让Person实现接口
class Person implements Comparable{
}
已知:Person类按照id和name重写了hashCode利equals方法,问下面代码输出什么?
HashSet set = new HashSet();
Person p1= new Person(1001,"AA");
Person p2= new Person(1002,"BB");
set.add(p1);
set.add(p2);
p1.name ="CC";
set.remove(p1);//无法成功删除p1,因为更改后的1001,CC和原先100,AA,两者的编码不相同,位置不一样,找不到更新后的位置无法成功删除
System.out.println(set);//输出两个对象
set.add(new Person(1001,"CC"));
System.out.println(set);//三个对象,两个new Person不是同一对象
set.add(new Person(1001, "AA"));//挂到p1后面
System.out.println(set);//四个对象