java工程师面试---图书统计 阿里面试题

学校图书馆共有 300 万册图书,想统计其中 Computer , Science ,计算机,科学这几个词出现的次数,并按照自然年度分类,如 2016 年出版的书籍中这几个词各自出现的次数,
2015 年······依次类推。
题目来源 链接:https://www.nowcoder.com/questionTerminal/0b09751acbb64f9d8c63706052748cd4
来源:牛客网
以下是自己根据多层结构构造统计方法,如果有不对,欢迎留言

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

class book{
    String contents;
    int byear;
    public String getContents() {
        return contents;
    }
    public void setContents(String contents) {
        this.contents = contents;
    }
    public int getByear() {
        return byear;
    }
    public void setByear(int byear) {
        this.byear = byear;
    }

}

class yearCount {
    List<countNum> numSet = new ArrayList<countNum>();
    int byear;

    public List<countNum> getNumSet() {
        return numSet;
    }

    public void setNumSet(List<countNum> numSet) {
        this.numSet = numSet;
    }

    public int getByear() {
        return byear;
    }

    public void setByear(int byear) {
        this.byear = byear;
    }


}

class countNum {
    String name;
    int num;

    public countNum() {

    }

    public countNum(String name, int num) {
        super();
        this.name = name;
        this.num = num;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }



}

public class Test {
    List<yearCount> counts = new ArrayList<yearCount>();
    Map<Integer, Integer> years = new HashMap<Integer, Integer>();
    Map<String, Integer> names = new HashMap<String, Integer>();

    public void count(String str, int byear,int nums) {
        if (years.get(byear) == null) {
            yearCount ycount = new yearCount();
            ycount.setByear(byear);
            years.put(byear, (counts.size() - 1));
            ycount.getNumSet().add(new countNum(str, nums));
            names.put(str + byear, (ycount.getNumSet().size() - 1));

        } else if (names.get((str + "" + byear)) == null) {
            int y = names.get(byear);
            counts.get(y).getNumSet().add(new countNum(str, nums));
            names.put(str + byear, (counts.get(y).getNumSet().size() - 1));

        } else {
            int i = names.get((str + "" + byear));
            int y = names.get(byear);
            int num = counts.get(y).getNumSet().get(i).num;
            counts.get(y).getNumSet().get(i).setNum((nums+num));
        }
    }

    public void add(String str,int byear,String index){
            String[] s= str.split(index);
            count(str,byear, (s.length-1));
    }

    public void main(book v) {
        add(v.contents,v.byear,"科学");
        add(v.contents,v.byear,"Computer");
        add(v.contents,v.byear,"Science");
        add(v.contents,v.byear,"计算机");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值