迭代器_HashMap分拣思路与面向对象组合解题JAVA_119-121

来源:http://www.bjsxt.com/
1、S02E119_01自定义实现迭代器深入迭代器迭代器原理_面向对象实现

package com.test.iterator;

import java.util.Iterator;
/**
 * 简化迭代器原理、加入接口、提供方法
 */
public class ArrayListForTestIterator implements Iterable<String> {

    private String[] elem = {"a","b","c"};
    private int size = elem.length;

    /**
     * 匿名内部类
     */
    public Iterator<String> iterator() {

        return new Iterator<String>() {
            private int cursor = -1;
            /**
             * 判断是否存在下一个元素
             */
            public boolean hasNext() {
                return cursor + 1 < size;
            }
            /**
             * 获取下一个元素
             */
            public String next() {
                cursor++;
                return elem[cursor];
            }
            /**
             * 删除元素
             */
            public void remove() {
                //没有实现
            }
        };
    }

    public static void main(String[] args) {
        ArrayListForTestIterator list = new ArrayListForTestIterator();
        Iterator<String> itr = list.iterator();
        while(itr.hasNext()){
            System.out.println(itr.next());
            itr.remove();//查看时可删除元素
        }
        //可重复使用
        itr = list.iterator();
        while(itr.hasNext()){
            System.out.println(itr.next());
        }

        System.out.println("增强for,必须实现java.lang.Iterable接口,重定iterator方法");
        for(String temp : list){
            System.out.println(temp);//一般不考虑下标时用增强for
            //不可用remove
        }
    }
}

2、S02E120_01HashMap_经典存储分拣思路简单_容易

package com.test.map;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
 * HashMap经典存储_分拣思路:
 * <br>this is a cat and that is a mice and where is the food?
 * <br>统计每个单词出现的次数
 * <br>存储到Map中
 * <br>key:String
 * <br>value:自定义类型
 * <br>第一种方法:为所有key创建容器,之后容器中存放对应value
 * <br>第二种方法:第一次创建容器并存放值value,第二次之后直接使用容器存入值
 */
public class Demo01 {
    String str = "this is a cat and that is a mice and where is the food";
    //分割字符串
    String[] strArray = str.split(" ");
    //存储到Map中
    Map<String,Letter> letterMap = new HashMap<String,Letter>();

    public static void main(String[] args) {
        test01();
        test02();
    }

    //第一种方法
    public static void test01(){
        System.out.println("第一种方法+++++++++++++++++++");
        Demo01 demo01 = new Demo01();
        for(String temp : demo01.strArray){
            //1、为所有key创建容器
            if(!demo01.letterMap.containsKey(temp)){
                demo01.letterMap.put(temp, new Letter());
            }
            //2、之后容器中存放对应value
            Letter letter = demo01.letterMap.get(temp);
            letter.setCount(letter.getCount() + 1);
        }

        //输出Map的值
        Set<String> keys = demo01.letterMap.keySet();
        for (String key : keys) {
            Letter letter = demo01.letterMap.get(key);
            System.out.println("字母:" + key + ",次数:" + letter.getCount());
        }
    }

    //第二种方法
    public static void test02(){
        System.out.println("第二种方法++++++++++++++++++++++++++++++++");
        Demo01 demo01 = new Demo01();
        for(String temp : demo01.strArray){
/*          //1、第一次创建容器并存放值value
            if(!demo01.letterMap.containsKey(temp)){
                Letter letter = new Letter();
                letter.setCount(1);
                demo01.letterMap.put(temp, letter);
            }else{
            //2、第二次之后直接使用容器存入值
            Letter letter = demo01.letterMap.get(temp);
            letter.setCount(letter.getCount() + 1);
            }*/

            //对以上代码优化
            Letter letter = demo01.letterMap.get(temp);
            if(null == letter){
                letter = new Letter();
                letter.setCount(1);
                demo01.letterMap.put(temp, letter);
            }else{//上面已获取了letter = demo01.letterMap.get(temp)
                letter.setCount(letter.getCount() + 1);
            }
        }

        //输出Map的值
        Set<String> keys = demo01.letterMap.keySet();
        for (String key : keys) {
            Letter letter = demo01.letterMap.get(key);
            System.out.println("字母:" + key + ",次数:" + letter.getCount());
        }
    }
}
/////////////////////////////////////////////////
package com.test.map;

public class Letter {
    private String name;
    private int count;

    public Letter() {
    }

    public Letter(String name, int count) {
        super();
        this.name = name;
        this.count = count;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count = count;
    }
}

3、S02E121_01121HashMap_经典存储经典分拣思路与面向对象组合解题

package com.test.map;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

/**
 * HashMap经典分拣思路与面向对象组合解题:
 * <br>定义一个Student类,属性:name姓名,classNumber班号,score成绩
 * <br>将若干Student对象放入List,请统计出每个班级的总分和平均分,分别打印出来
 */
public class Demo02 {

    public static void main(String[] args) {
        List<Student> list = new ArrayList<Student>();
        exam(list);

        //统计
        Map<String, ClassRoom> classRoomMap = new HashMap<String, ClassRoom>();
        ClassRoom.count(classRoomMap,list);
        //打印
        ClassRoom.printScore(classRoomMap);
    }
    /**
     * 将若干Student对象放入List
     */
    public static void exam(List<Student> list){
        list.add(new Student("a", "001", 80));
        list.add(new Student("b", "001", 80));
        list.add(new Student("c", "002", 80));
        list.add(new Student("d", "003", 80));
        list.add(new Student("e", "003", 80));
    }
}
/
package com.test.map;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

public class ClassRoom {
    private String classNum;
    private List<Student> stuList;
    private double total;

    public ClassRoom() {
        stuList = new ArrayList<Student>();
    }
    public ClassRoom(String classNum) {
        this();
        this.classNum = classNum;
    }
    /**
     * 统计分数
     */
    public static void count(Map<String, ClassRoom> classRoomMap,List<Student> stuList){
        for(Student stu : stuList){
            String classNum = stu.getClassNum();
            double score = stu.getScore();
            //根据班级编号查看Map是否存在该班级——分拣思路
            ClassRoom classRoom = classRoomMap.get(classNum);
            if(null == classRoom){//把班级存储到Map中
                classRoom = new ClassRoom(classNum);
                classRoomMap.put(classNum, classRoom);
            }

            //存储总分
            classRoom.setTotal(classRoom.getTotal() + score);
            classRoom.getStuList().add(stu);//班级加入学生
        }
    }
    /**
     * 打印总分与平均分
     */
    public static void printScore(Map<String, ClassRoom> classRoomMap){
        Set<Map.Entry<String, ClassRoom>> entrySet = classRoomMap.entrySet();
        Iterator<Entry<String, ClassRoom>> itr = entrySet.iterator();
        while(itr.hasNext()){
            Entry<String, ClassRoom> entry = itr.next();
            ClassRoom classRoom = entry.getValue();
            double avg = classRoom.getTotal()/classRoom.getStuList().size();
            System.out.println("班级号为:" + classRoom.getClassNum() + ",总分为:" + classRoom.getTotal() + ",平均分为:" + avg);
        }
    }
    public String getClassNum() {
        return classNum;
    }
    public void setClassNum(String classNum) {
        this.classNum = classNum;
    }
    public List<Student> getStuList() {
        return stuList;
    }
    public void setStuList(List<Student> stuList) {
        this.stuList = stuList;
    }
    public double getTotal() {
        return total;
    }
    public void setTotal(double total) {
        this.total = total;
    }
}
//
package com.test.map;

public class Student {
    private String name;
    private String classNum;
    private int score;

    public Student(){

    }
    public Student(String name, String classNum, int score) {
        super();
        this.name = name;
        this.classNum = classNum;
        this.score = score;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getClassNum() {
        return classNum;
    }
    public void setClassNum(String classNum) {
        this.classNum = classNum;
    }
    public int getScore() {
        return score;
    }
    public void setScore(int score) {
        this.score = score;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值