迭代器_HashMap分拣思路与面向对象组合解题JAVA_119-121
来源:互联网 发布:js新窗口打开url 编辑:程序博客网 时间:2024/06/18 14:15
来源: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
- 迭代器_HashMap分拣思路与面向对象组合解题JAVA_119-121
- 121_容器_HashMap_经典存储_经典分拣思路_与面向对象组合解题
- HashMap经典存储案例,分拣思路_与面向对象组合解题
- 面向对象分拣存储3、案例
- Java中面向对象分拣存储
- Map实现分拣思路
- 面向对象之继承与组合
- 面向对象思路
- HashMap经典存储--分拣思路
- 面向对象--组合
- 面向对象----继承,组合
- Java面向对象继承与组合的问题
- 《JAVA面向对象编程》读书笔记-继承与组合
- 关于面向对象设计中继承与组合的选择
- 面向对象实验三( 组合、继承与多态性)
- Python 进阶_OOP 面向对象编程_组合与继承
- 面向对象编程(OOP)中组合与继承的区别
- HashMap分拣存储2:统计每个单词出现的次数(采用面向对象)
- 学习html5的WebSocket连接
- 窥探 kernel --- 初识进程调度器 http://blog.csdn.net/muge0913/article/details/7561323
- 你的时间有限,不要为别人而活!
- (2015/11/18)[小Demo]模仿“轻量级图片查看”(状态:未完成)
- Qt之操作数据库(SQLite)
- 迭代器_HashMap分拣思路与面向对象组合解题JAVA_119-121
- 高斯函数
- Lucene系列-index弹性扩展
- uva oj 340 - Master-Mind Hints
- 使用SQLAlchemy ORM进行一些基础的操作(建表,插入,查询,删除)
- 重建二叉树
- Poj 2923 Relocation(状态压缩+动态规划)
- LeetCodeOJ_7_Reverse Integer
- 【南大软院大神养成计划】html+css之网页布局