项目代码
https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter14/src/com/yinhai/homework
1.
(1)封装个新闻类,包含标题和内容属性,提供get, set方法, 重写toString方法,打印对象时只打印标题;
(2)只提供一个带参数的构造器,实例化对象时,只初始化标题;并且实例化两个对象:
新闻一:新冠确诊病例超千万,数百万印度教信徒赴恒河“圣浴”引民众担忧
新闻二:男子突然想起2个月前钓的鱼还在网兜里,捞起一看赶紧放生
(3)将新闻对象添加到ArrayList集合中,并且进行倒序遍历:
(4)在遍历集合过程中,对新闻标题进行处理,超过15字的只保留前15个,然后在后边加
(5)在控制台打印遍历出经过处理的新闻标题;
public class Homework01 { public static void main(String[] args) { News news1 = new News("新冠确诊病例超千万,数百万印度教信徒赴恒河“圣浴”引民众担忧"); News news2 = new News("男子突然想起2个月前钓的鱼还在网兜里,捞起一看赶紧放生"); List list = new ArrayList(); list.add(news1); list.add(news2); News temp; for (int i = list.size() - 1; i >= 0; i--) { temp = (News) list.get(i); if (temp.getTitle().length() > 15) { String temp1 = temp.getTitle().substring(0,15) +"..."; System.out.println(temp1); } else { System.out.println(temp.getTitle()); } } } } class News { private String title; private String context; public News(String title) { this.title = title; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContext() { return context; } public void setContext(String context) { this.context = context; } @Override public String toString() { return"News{"+"title='"+ title + '\'' +", context='"+ context + '\'' + '}'; } } 2.
使用ArrayList完成对对象Car {name, price}的各种操作
1.add:添加单个元素
2.remove:删除指定元素
Car car = new Car("宝马",400000);
3.contains:查找元素是否存在
Car car2 = new Car("宾利",5000000):
4.size:获取元素个数
5.isEmpty:判断是否为空
6.clear:清空
7.addAIl:添加多个元素
8.containsAll:查找多个元素是否都存在
9.removeAll:删除多个元素使用增强for和迭代器来遍历所有的car,需要重写Car的toString方法
public class Homework02 { public static void main(String[] args) { ArrayList arrayList = new ArrayList(); Car car = new Car("宝马", 400000); Car car2 = new Car("宾利",5000000); //1.add:添加单个元素 arrayList.add(car); arrayList.add(car2); System.out.println(arrayList); //* 2.remove:删除指定元素 arrayList.remove(car); System.out.println(arrayList); //* 3.contains:查找元素是否存在 System.out.println(arrayList.contains(car));//F //* 4.size:获取元素个数 System.out.println(arrayList.size());//1 //* 5.isEmpty:判断是否为空 System.out.println(arrayList.isEmpty());//F //* 6.clear:清空 //System.out.println(arrayList.clear();); //* 7.addAll:添加多个元素 System.out.println(arrayList); arrayList.addAll(arrayList);//2个宾利 System.out.println(arrayList); //* 8.containsAll:查找多个元素是否都存在 arrayList.containsAll(arrayList);//T //* 9.removeAll:删除多个元素 //arrayList.removeAll(arrayList); //相当于清空 //* 使用增强for和 迭代器来遍历所有的car , 需要重写 Car 的toString方法 for (Object o : arrayList) { System.out.println(o);// } System.out.println("===迭代器==="); Iterator iterator = arrayList.iterator(); while (iterator.hasNext()) { Object next = iterator.next(); System.out.println(next); } } } class Car { private String name; private double price; public Car(String name, double price) { this.name = name; this.price = price; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return"Car{"+"name='"+ name + '\'' +", price="+ price + '}'; } } 3.
按要求完成下列任务
1)使用HashMap类实例化一个Map类型的对象m, 键(String) 和值(int) 分别用于存储员,工的姓名和工资,存入数据如下:jack- -650元; tom- -1 200元; smith- 2900元;
2)将jack的工资更改为2600元
3)为所有员工工资加薪100元
4)遍历集合中所有的员工
5)遍历集合中所有的工资
public class Homework03 { public static void main(String[] args) { HashMap m = new HashMap(); m.put("jack", 650); m.put("tom", 1200); m.put("smith", 2900); System.out.println(m); m.put("jack",2600); System.out.println(m); Set keySet = m.keySet(); for (Object key :keySet) { m.put(key,(Integer)m.get(key) + 100); } System.out.println(m); Set entrySet = m.entrySet(); Iterator iterator = entrySet.iterator(); while (iterator.hasNext()) { Map.Entry entry= (Map.Entry)iterator.next(); System.out.println(entry.getKey() +""+ entry.getValue()); } Collection value = m.values(); System.out.println(value); } } 4.试分析HashSet和TreeSet分别如何实现去重的
1.hashset是单列集合,使用的本质上是hashmap的方法,判断key值是否重复是通过添加的第二个开始的key和之前的key值相比较,先是判断计算出的hash值的table[i]是否为空,如果为空直接存入该数组元素,不为空,执行下列的判断是否为红黑树,判断内容是否相同,在内容判断上,也采用了hash值与eques方法或指向的地址来判断,所以这时候可以重写equals来自定义是否相同。
(hashCode()+equals())
而TreeSet本质上是用了一个匿名内部类的比较接口类,该类可以自定义判断相同,调用了TreeMap方法,里面调用compare方法,如果传入了重写compare会去实现,如果没有传入,则以添加的对象实现的Compare接口的compareTo的方法。
//public class Homework05 { // public static void main(String[] args) { // TreeSet treeSet = new TreeSet(); // //分析源码 // //add 方法,因为 TreeSet() 构造器没有传入Comparator接口的匿名内部类 // //所以在底层 Comparable
k = (Comparable
) key; // //即 把 Perosn转成 Comparable类型 // treeSet.add(new Person());//ClassCastException. // System.out.println(treeSet); // } //} // //class Person implements Comparable{ // // @Override // public int compareTo(Object o) { // return 0; // } //} 5.
上面的是错误的
remove底层会判断该对象的hash,但是下标已经找不到原先的p1,所以删除失败,然后最后一个1001“AA”,因为原先加过了,所以 会定在原先hash的位置,然后再判断内容不相同,会挂在该索引的屁股后面,所以输出为4个对象
6.