1.写一个Worker类,装入集合中去掉重复的对象
【考察重点:重写equals()方法和HashCode()方法】
package day18;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
public class Test01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.重写hashcode()和equals方法 worker
Set<Worker> set=new HashSet<Worker>();
set.add(new Worker("zhangsan",66));
set.add(new Worker("lisi",15));
set.add(new Worker("wangwu",54));
set.add(new Worker("lisi",15));
for (Worker worker : set) {
System.out.println(worker);
}
}
}
class Worker{
String name;
double salary;
public Worker(String name, double salary) {
super();
this.name = name;
this.salary = salary;
}
@Override
/*第一种hashcode()方法
public int hashCode() {
return Objects.hash(name);
}*/
//第二种hashCode()方法
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
long temp;
temp = Double.doubleToLongBits(salary);
result = prime * result + (int) (temp ^ (temp >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
//对比地址是否相同
if (this == obj)
return true;
//看要对比的对象是否是空值
if (obj == null)
return false;
//如果对象的类型不一样 返回false
if (getClass() != obj.getClass())
return false;
Worker other = (Worker) obj;
//如果属性值为空
if (name == null) {
//其他的属性值不为空 就说明不相等
if (other.name != null)
return false;
//如果属性值不为空 如果姓名的内容不相等 返回false
} else if (!name.equals(other.name))
return false;
//如果工资不相等 返回false
if (Double.doubleToLongBits(salary) != Double.doubleToLongBits(other.salary))
return false;
return true;
}
@Override
public String toString() {
return "Worker [name=" + name + ", salary=" + salary + "]";
}
}
总结原因:hashCode()和equals方法在Eclipse或Myeclipse上都可以生成 所以练得少 记得少 不重视 应当
百看不如一练 多练!!!!
2.集合存入学生的姓名和成绩 遍历并求出平均成绩
【考察重点】集合的遍历 键遍历/值遍历/entrySet遍历/for-each遍历
(1)【keySet方法】
package day18;
import java.util.*;
import java.util.Map.Entry;
public class Test02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//2.map 学生姓名成绩遍历打印 求学生的平均成绩
Map<String,Double> map=new HashMap<String,Double>();
map.put("zhangsan", 25.0);
map.put("lisi", 82.0);
map.put("wangwu",99.0);
//1.用keySet方法
Set keySet=map.keySet();//获取键的集合
Iterator it=keySet.iterator();//迭代键的集合.
Double sum = (double) 0;
while(it.hasNext()){
String key=(String) it.next();
Double score=map.get(key); //获取键对应的每个键对应的值
sum+=score;
}
Double average=sum/map.size();
System.out.println(average);
}
}
(2)【entrySet方法】
package day18;
import java.util.*;
import java.util.Map.Entry;
public class Test02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//2.map 学生姓名成绩遍历打印 求学生的平均成绩
Map<String,Double> map=new HashMap<String,Double>();
map.put("zhangsan", 25.0);
map.put("lisi", 82.0);
map.put("wangwu",99.0);
//2.用entrySet方法
Set<Entry<String,Double>> set=map.entrySet();
Iterator<Entry<String,Double>> it=set.iterator();
Double sumScore=(double) 0;
for (Entry<String, Double> entry : set) {
Double score=entry.getValue();
sumScore+=score;
}
Double average=sumScore/map.size();
System.out.println(average);
}
}
(3)【for-each方法】
package day18;
import java.util.*;
import java.util.Map.Entry;
public class Test02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,Double> map=new HashMap<String,Double>();
map.put("zhangsan", 25.0);
map.put("lisi", 82.0);
map.put("wangwu",99.0);
//3.for-each方法
Set<String> set=map.keySet();
Double sumScore=(double) 0;
for (String string : set) {
Double score=map.get(string);
sumScore+=score;
}
System.out.println(sumScore/map.size());
}
}
}
(4)【values方法】
package day18;
import java.util.*;
import java.util.Map.Entry;
public class Test02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,Double> map=new HashMap<String,Double>();
map.put("zhangsan", 25.0);
map.put("lisi", 82.0);
map.put("wangwu",99.0);
//4.values
Collection sumScore=map.values();
Double sum=(double) 0;
for (Object object : sumScore) {
sum+=(Double)object;
}
Double average=sum/map.size();
System.out.println("平均成绩:"+average);
}
}