Java集合-练习巩固
练习一
public class H1_Test {
public static void main(String[] args) {
H1_News h1News = new H1_News("新冠确诊病例超千万,数百万印度教信徒赴恒河\"圣浴\"引民众担忧");
//英文字符的双引号需要用到转义字符,否则报错;而中文的不需要
H1_News h1News1 = new H1_News("男子突然想起2个月前钓的鱼还在网兜里,捞起一看赶紧放生");
ArrayList arrayList = new ArrayList();
arrayList.add(h1News);
arrayList.add(h1News1);
for (int i = arrayList.size()-1; i >= 0 ; i--) {
//这里需要size-1,否则抛出异常:IndexOutOfBoundsException,原因很明显
H1_News h1News2 = (H1_News) arrayList.get(i);
String s = h1News2.getTopic();
if (s.length()>15){
System.out.println(s.substring(0,15)+"...");
//使用到获取字符串字串的方法 substring ,注意点是:参数截取的是前闭后开
}else
System.out.println(arrayList.get(i));
//这里的处理标题的程序可以封装到一个方法里面 processTopic
}
}
}
练习二
练习三
public class H3_test {
public static void main(String[] args) {
Map hashMap = new HashMap();
hashMap.put("jack",650);
hashMap.put("tom",1200);
hashMap.put("smith",2900);
hashMap.put("jack",2600); //更新即替换
//HashMap的遍历方式:获取集合(keySet,entrySet,values),
// 然后遍历(迭代器,增强for循环)
// map 的get 方法:根据键,获取值
Set set = hashMap.keySet();
for (Object o : set) {
hashMap.put(o,(Integer)hashMap.get(o)+100);
System.out.println(o);
}//加薪100
System.out.println(hashMap);
Set set1 = hashMap.entrySet();
Iterator iterator = set1.iterator();
while (iterator.hasNext()) {
Map.Entry next = (Map.Entry) iterator.next();
System.out.println(next.getValue());
}
}
}
练习四、五
抛出 ClassCastException
重点:理解 TreeSet
https://www.cnblogs.com/ffforward/p/15425433.html
练习六( ! )
注意点:
(1)HashSet不允许元素重复;
(2)hashCode和equals方法已被重写
理解:
(1)hashSet.remove(p1) 失败:
将 p1.name 改为 "CC" 后,p1的 hashCode 改变了,再次通过 p1 的hash值计算索引的时候,计算到的索引和 add 时候的索引已不一致。
(2)hashSet.add(new H6_Person(1001, "CC")) 该参数和 p1 应该被判断被equals ,为何能 add:
由 id 和 name 计算出来的 hashCode 和修改前的 p1 并不一致,所以加入的是不同索引处的位置。
练习七