按要求实现:
(1)封装一个新闻类,包含标题和内容属性,提供get、set方法,重写toString方法,打印对象时只打印标题;
(2)只提供一个带参数的构造器,实例化对象时,只初始化标题;并且实例化两个对象:
新闻一:新冠确诊病例超千万,数百万印度教信徒赴恒河“圣浴”引民众担忧
新闻二:男子突然想起2个月前钓的鱼还在网兜里,捞起一看赶紧放生
(3)将新闻对象添加到ArrayList集合中,并且进行倒序遍历;
(4)在遍历集合过程中,对新闻标题进行处理,超过15字的只保留前15个,然后在后边加“…."
(5)在控制台打印遍历出经过处理的新闻标题;
自己写的
package com.yt.collectionhomework;import java.util.ArrayList;
import java.util.Iterator;public class Homework01 {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);System.out.println("arrayList=" + arrayList);//实现倒序遍历System.out.print("倒序遍历");for (int i = arrayList.size()-1; i >= 0; i--) {System.out.print(arrayList.get(i));}System.out.println();System.out.println();Iterator iterator = arrayList.iterator();while (iterator.hasNext()){Object next = iterator.next();//向下转型为News对象,方便获得title的字符串String str = ((News)next).getTitle();if (str.length() > 15){System.out.println(str.substring(0, 15) + "...");}}}
}
class News{private String title;private 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;}@Overridepublic String toString() {return "\nNews{" +"title='" + title + '\'' +'}';}
}
对比老师写的
重写写一个方法来处理标题的内容,这种重新写方法的思想要建立
import java.util.ArrayList;public class Homework01 {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--) {//System.out.println(arrayList.get(i));News news = (News)arrayList.get(i);System.out.println(processTitle(news.getTitle()));}}//专门写一个方法,处理现实新闻标题 process处理public static String processTitle(String title) {if(title == null) {return "";}if(title.length() > 15) {return title.substring(0, 15) + "..."; //[0,15)} else {return title;}}
}/*** 按要求实现:* (1) 封装一个新闻类,包含标题和内容属性,提供get、set方法,重写toString方法,打印对象时只打印标题;* (2) 只提供一个带参数的构造器,实例化对象时,只初始化标题;并且实例化两个对象:* 新闻一:新冠确诊病例超千万,数百万印度教信徒赴恒河“圣浴”引民众担忧* 新闻二:男子突然想起2个月前钓的鱼还在网兜里,捞起一看赶紧放生* (3) 将新闻对象添加到ArrayList集合中,并且进行倒序遍历;* (4) 在遍历集合过程中,对新闻标题进行处理,超过15字的只保留前15个,然后在后边加“…”* (5) 在控制台打印遍历出经过处理的新闻标题;*/
class News {private String title;private 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;}@Overridepublic String toString() {return "News{" +"title='" + title + '\'' +'}';}
}
使用ArrayList完成对对象Car {name, price}的各种操作
l.add:添加单个元素
2.remove:删除指定元素
3.contains:查找元素是否存在
4.size:获取元素个数
5.isEmpty:判断是否为空
6.clear:清空
7.addAll:添加多个元素
8.containsAll:查找多个元素是否都存在
9.removeAll:删除多个元素
使用增强for和迭代器来遍历所有的car,需要重写Car的toString方法
Car car = new Car(“宝马",400000);
Car car2 = new Car(“宾利".5000000);
package com.yt.collectionhomework;import java.util.ArrayList;
import java.util.Iterator;public class Homework02 {public static void main(String[] args) {Car car = new Car("宝马", 400000);Car car1 = new Car("宾利", 5000000);ArrayList list = new ArrayList();//添加单个元素list.add(car);list.add(car1);System.out.println("list=" + list);//删除指定元素list.remove(1);System.out.println("list=" + list);//查找元素是否存在,判断的是对象System.out.println(list.contains(car));//获取元素个数System.out.println(list.size());//判断是否为空System.out.println(list.isEmpty());//添加多个元素ArrayList list1 = new ArrayList();list1.add("hello1");list1.add("你好啊");list.addAll(list1);System.out.println("list=" + list);//查找多个元素是否存在System.out.println(list.containsAll(list1));//删除多个元素//使用增强for来遍历for (Object obj : list){System.out.println(obj);}//使用迭代器遍历Iterator iterator = list.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;}@Overridepublic String toString() {return "Car{" +"name='" + name + '\'' +", price=" + price +'}';}
}
按要求完成下列任务
1)使用HashMap类实例化一个Map类型的对象m,键(String)和值(int);分别用于存储员工的姓名和工资,存入数据如下:
jack—650元; tom—1200元;smith——2900元;
2)将jack的工资更改为2600元
3)为所有员工工资加薪100元;
4)遍历集合中所有的员工;
package com.yt.collectionhomework;import java.util.*;public class Homework03 {public static void main(String[] args) {HashMap map = new HashMap();map.put("jack",new Emp("jack",650));map.put("tom",new Emp("tom",1200));map.put("smith",new Emp("smith",2900));System.out.println("map=" + map);//将jack的工资更改为2600元map.replace("jack",new Emp("jack",2600));System.out.println(map);//为所有员工工资加薪100元;//使用循环来完成Set keySet0 = map.keySet();for (Object obj : keySet0){Emp e = (Emp)map.get(obj);double newSalay = e.getSalary()+100;System.out.println(obj + "-" +newSalay);}//遍历集合中所有的员工Set keySet = map.keySet();for (Object obj : keySet){System.out.println(obj + "-" + map.get(obj));}Collection values = map.values();for (Object obj : values){System.out.println(obj);}Set entrySet = map.entrySet();Iterator iterator = entrySet.iterator();while (iterator.hasNext()) {Map.Entry next = (Map.Entry)iterator.next();System.out.println(next);}}
}
class Emp{private String name;private double salary;public Emp(String name, double salary) {this.name = name;this.salary = salary;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}@Overridepublic String toString() {return "Emp{" +"name='" + name + '\'' +", salary=" + salary +"}\n";}
}
老师写的
为所有员工工资加薪100元;这个地方思考不一样
import java.util.*;public class Homework03 {public static void main(String[] args) {Map m = new HashMap();m.put("jack", 650);//int->Integerm.put("tom", 1200);//int->Integerm.put("smith", 2900);//int->IntegerSystem.out.println(m);m.put("jack", 2600);//替换,更新System.out.println(m);//为所有员工工资加薪100元;//keySetSet keySet = m.keySet();for (Object key : keySet) {//更新m.put(key, (Integer)m.get(key) + 100);}System.out.println(m);System.out.println("=============遍历=============");//遍历 EntrySetSet entrySet = m.entrySet();//迭代器Iterator iterator = entrySet.iterator();while (iterator.hasNext()) {Map.Entry entry = (Map.Entry)iterator.next();System.out.println(entry.getKey() + "-" + entry.getValue());}System.out.println("====遍历所有的工资====");Collection values = m.values();for (Object value : values) {System.out.println("工资=" + value);}}
}
/*** 按要求完成下列任务* 1)使用HashMap类实例化一个Map类型的对象m,键(String)和值(int)分别用于存储员工的姓名和工资,* 存入数据如下: jack—650元;tom—1200元;smith——2900元;* 2)将jack的工资更改为2600元* 3)为所有员工工资加薪100元;* 4)遍历集合中所有的员工* 5)遍历集合中所有的工资*/
试分析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 Person0);
import java.util.TreeSet;public class Homework05 {public static void main(String[] args) {TreeSet treeSet = new TreeSet();//分析源码//add 方法,因为 TreeSet() 构造器没有传入Comparator接口的匿名内部类//所以在底层 Comparable super K> k = (Comparable super K>) key;//即 把 Perosn转成 Comparable类型,但是创建的Person类并没有实现Comparable接口//补充:String 实现了Comparable接口,因此在传入相同字符串的时候不能重复treeSet.add(new Person());//ClassCastException.treeSet.add(new Person());//ClassCastException.treeSet.add(new Person());//ClassCastException.treeSet.add(new Person());//ClassCastException.treeSet.add(new Person());//ClassCastException.System.out.println(treeSet);}
}class Person {}
如何解决上述问题呢?
import java.util.TreeSet;public class Homework05 {public static void main(String[] args) {TreeSet treeSet = new TreeSet();//分析源码//add 方法,因为 TreeSet() 构造器没有传入Comparator接口的匿名内部类//所以在底层 Comparable super K> k = (Comparable super K>) key;//即 把 Perosn转成 Comparable类型,但是创建的Person类并没有实现Comparable接口//补充:String 实现了Comparable接口,因此在传入相同字符串的时候不能重复treeSet.add(new Person());treeSet.add(new Person());treeSet.add(new Person());treeSet.add(new Person());treeSet.add(new Person());System.out.println(treeSet);//返回1//因为compareTo方法返回的值都一样,没有做比较处理}
}class Person implements Comparable{@Overridepublic int compareTo(Object o) {return 0;}
}

import java.util.HashSet;
import java.util.Objects;public class Homework06 {public static void main(String[] args) {HashSet set = new HashSet();//okPerson p1 = new Person(1001,"AA");//okPerson p2 = new Person(1002,"BB");//okset.add(p1);//okset.add(p2);//okp1.name = "CC";set.remove(p1);//删除的时候也会hashSystem.out.println(set);//2,p1.name = "CC"之后p1的hash变化,无法删除set.add(new Person(1001,"CC"));System.out.println(set);//3set.add(new Person(1001,"AA"));System.out.println(set);//4}
}class Person {public String name;public int id;public Person(int id, String name) {this.name = name;this.id = id;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return id == person.id &&Objects.equals(name, person.name);}@Overridepublic int hashCode() {return Objects.hash(name, id);}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", id=" + id +'}';}
}
