Employee.java 代码
public class Employee {
private String name;
private int id;
private double salary;
public static int people=0;
public Employee(){
people++;
}
public Employee(String name,int id,double salary){
this();
this.name=name;
this.id=id;
this.salary=salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "[姓名:" + name + ", 工号:" + id + ", 工资:" + salary +"]";
}
}
![](https://img.haomeiwen.com/i2462375/917a874e996926be.png)
HR.java 代码
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;import java.util.Map;import java.util.Date;import java.util.HashMap;import java.util.Random;import java.util.TreeMap;//继承 Employee类public class HR extends Employee {// =========================定义20个数组================================private Listlist = new ArrayList();private static String[] names = { "赵1", "李2", "王3", "钱4", "科5", "赵6", "赵7", "赵8", "赵9", "赵10", "赵11", "赵12", "赵13","赵14", "赵15", "赵16", "赵17", "赵18", "赵19", "赵20" };private static int[] ids = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };private static double[] salarys = { 1111, 2222, 3333, 1111, 4444, 5555, 6666, 7777, 8888, 9999, 1234, 4567, 7890,1235, 1115, 6666, 8765, 6543, 7865, 5678 };// ==========================执行init()操作=======================================public HR() {init();}// =====================把定义的数组放到list列表中==================private void init() {for (int i = 0; i < 20; i++) {Employee e = new Employee(names[i], ids[i], salarys[i]);// 在for循环里新建一个对象list.add(e);// 在list里添加对象}System.out.print(list);}// =========================员工列表====================================public ListgetEmployees() { // List是返回值的意思,要返回的// Listlist = new// ArrayList();return list;}// ========================取最高工资的员工========================public Employee getTopSalaryEmployee() { // Employee是要返回的类型Employee employee = null; // 定义employee并且初始化为 空 值double max = 0;for (Employee e : list) { // 遍历if (e.getSalary() >= max) { // 取员工中工资的最大值 如果得到的大于已经知道的最大值max = e.getSalary(); // 那么 最大值就是取到的employee = e; // 返回员工就是e}}return employee;// 返回员工}// =============================取前面10个工资最高的员工========================public ListgetTop10SalaryEmployees() { // Listlist =// new// ArrayList();// 之前new 的对象的返回值类型Listtop10 = new ArrayList(); // 新建一个arraylist对象为top10for (Employee e : list) { // 遍历top10.add(e); // 在top10这个list列表里添加取到的值e,也就是代表前面10个工资最高的员工}Collections.sort(top10, new Comparator() {// mew// Comparator是新建一个比较器// top10是要进行比较操作的数组public int compare(Employee o1, Employee o2) { // 这些都是比较器中的内容 定义员工o1// 和员工 o2if (o1.getSalary() > o2.getSalary()) // 如果o1的工资大于o2的工资return -1; // 返回-1就是不进行排序else if (o1.getSalary() < o2.getSalary())// 如果o1的工资小于o2,那么就交换位置进行排序return 1; // 返回1就是 交换位置进行排序elsereturn 0; // 返回0就是不进行排序}});return top10.subList(0, 10); // 返回top10这个list列表中的前10个// subList(0,10)就是取前10个}// =========================增加一个新员工======================================public void enrollEmployee() {Random r = new Random(); // 随机增加一个新员工Employee e = new Employee("新员工" + people, people, 250 + r.nextInt(3000)); // people是一个id号// ,新员工1和新员工2// ,250+r.nextInt(3000)随便取3000以内的一个数并且加上250是工资薪水list.add(e);// 把新员工的信息添加到列表中}// ============================已经登记的员工,不登记==============================public void resignEmployee(int employeeId) { // int employeeId就是员工的idfor (int i = 0; i < list.size(); i++) {if (list.get(i).getId() == employeeId) { // 如果列表中已有该员工的id号list.remove(i); // 去掉重复的break; // break跳出循环}}}// =================================统计====================================public void count() {ListallEmployees = new ArrayList();// 新建一个list列表for (Employee e : list) {// 遍历allEmployees.add(e);// 在新建的列表里添加员工 e 也就是Employee}Mapmap = new TreeMap(new Comparator() {// 类// TreeMapK// -// 此映射维护的键的// V// -// 映射值的类型/* * Map类似list用来存放数据的 * * Mapmap = new TreeMap(); 和Map map=new TreeMap(); * * 这两个的区别是前一种形式指明Map中存放的类型key和value都是String类型的,其他形式的放入Map中会提示错误。 * * 而后一种是Map中的key和value可以是任意类型对象,可以 * * 既把String类型的放入也可以把Integer的类型放入都不会报错。 * * 在foreach形式的循环中要求List或是Map必须明确指明其中存放数据的类型, * * 否则不能使用这种形式的循环。 * * */@Overridepublic int compare(Double o1, Double o2) {// 新建一个比较器 new// Comparator()
// int compare(T o1, T
// o2);
// TODO Auto-generated method stub
return o2.compareTo(o1);// 返回 员工o1和员工o2所比较的结果 调用系统方法中的
/*
* public static int compare(double d1, double d2) { if (d1 <
* d2) return -1; // Neither val is NaN, thisVal is smaller if
* (d1 > d2) return 1; // Neither val is NaN, thisVal is larger
*
*
* 的类似
*
*/
}
});
for (int i = 0; i < allEmployees.size(); i++) { // 循环
double sa = allEmployees.get(i).getSalary(); // 得到数组中其中一个对象的 工资
if (map.containsKey(sa)) { // key - 测试是否存在于此映射中的键 sa是一个固定数目的工资
// 如果此映射包含指定键的映射关系,则返回 true。
int val = map.get(sa) + 1; // 统计 如果发现一个相同工资的就+1
// get是连接一个特殊的值和一个特殊的键
map.put(sa, val);/* 发现已经存在的值就加1 进行统计 */
} else {
map.put(sa, 1);// 发现新的值 就把它数量定为 1
}
}
System.out.println("统计工资:");
for (Double d : map.keySet()) {// map中取出所有的键值 并用set进行排序
System.out.println("工资" + d + "的员工有" + map.get(d) + "人");
} // d是 工资值 map中 键值和数值是相关联的 get得到d的统计值
}
// =========================输出========================================================================
public String toString() {
return "员工列表: " + list + ",最高工资的员工:"
+ getTopSalaryEmployee() + ", 前十个最高工资的员工: " + getTop10SalaryEmployees() ;
}
}
![](https://img.haomeiwen.com/i2462375/71b021873095d954.png)
![](https://img.haomeiwen.com/i2462375/52b8bbf50eddc059.png)
![](https://img.haomeiwen.com/i2462375/b5cecb688334d0e7.png)
![](https://img.haomeiwen.com/i2462375/3253c39edd1a805c.png)
![](https://img.haomeiwen.com/i2462375/f861537ea1fff5e8.png)
![](https://img.haomeiwen.com/i2462375/747b1bd9a939fdeb.png)
![](https://img.haomeiwen.com/i2462375/258533dd80f1c0d3.png)
testEmp.java 代码
public class testEmp {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("所有的员工列表: ");
HR test = new HR();
System.out.println(test.getEmployees());
System.out.println("========================================================");
System.out.println("前10个工资最高的员工: ");
System.out.println(test.getTop10SalaryEmployees());
System.out.println("=================================================================");
System.out.println("最高工资的员工: ");
System.out.println(test.getTopSalaryEmployee());
System.out.println("==============================================");
}
}
![](https://img.haomeiwen.com/i2462375/b1fc439a49146354.png)
网友评论