8.童心幼儿园开学了,有一些适龄儿童入学,请设计一个分大班(6),中班(4-5),小班(2-3)的程序, 并在测试类中将结果输出出来
package $10_22;
/**
* @desc 8.童心幼儿园开学了,有一些适龄儿童入学,请设计一个分大班(6),中班(4-5),小班(2-3)的程序,
* 并在测试类中将结果输出出来
* 思路:按年龄排序,然后多路决策分别存入三个容器中
* @param args
*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.Map.Entry;
/**
*
* @desc 重写map中的put实现当key重复时将新value追加到旧value后面
* @author user
*
*/
class mymap extends HashMap<Integer, String>{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public String put(Integer key, String value) {
Set<Integer> keys = this.keySet();
for (Integer integer : keys) {
if (key.equals(integer)) {//判断出key值相同
String jiuValue = this.get(integer);//取出旧value
value=jiuValue+","+value;//拼接
break;
}
}
return super.put(key, value);//返回调用父类
}
}
class youErYuan {
public static void main(String[] args) {
//创建map容器,key为年龄,value为姓名
// Map<Integer,String> map=new HashMap<Integer, String>();
mymap map = new mymap();
map.put(1, "一岁小哥");
map.put(3, "李四");
map.put(5, "李六");
map.put(4, "李七");
map.put(3, "李八");
map.put(2, "李九");
map.put(6, "李六");
map.put(3, "李十");
map.put(2, "张三");
map.put(4, "王五");
//打印输出结果
Set<Integer> keys0 = map.keySet();
for (Integer integer : keys0) {
System.out.print("key=="+integer+"\t");
System.out.println("value=="+map.get(integer));
}
System.out.println("------------------------");
//list套map自定义比较器排序
/**
ArrayList<Map<Integer, String>> list = new ArrayList<Map<Integer, String>>();
Collections.sort(list,new Comparator<Map<Integer, String>>() {
@Override
public int compare(Map<Integer, String> o1, Map<Integer, String> o2) {
return 0;
}
});
*/
//entryset()自动排序
Set<Entry<Integer, String>> keys = map.entrySet();
//结果展示
for (Entry<Integer, String> entry : keys) {
System.out.print("key=="+entry.getKey()+"\tvalue=="+entry.getValue()+"\n");
}
System.out.println("---------------------------------");
//创建大中小三个班级并统计班级人数
List<String> xiaoBan=new ArrayList<String>();
int xiaoBanren=0;
List<String> zhongBan=new ArrayList<String>();
int zhongBanren=0;
List<String> daBan=new ArrayList<String>();
int daBanren=0;
String regex="[,]";
for (Integer integer : keys0) {
String[] ren = map.get(integer).split(regex);//正则表达式分割岁数相同的name
int renShu=ren.length;//统计岁数相同的个数
if (integer>=2 && integer<=3) {
xiaoBanren+=renShu;//小班班级人数统计
for (int i = 0; i < renShu; i++) {
xiaoBan.add(ren[i]);
}
}else if (integer>=4 && integer<=5) {
zhongBanren+=renShu;
for (int i = 0; i < renShu; i++) {
zhongBan.add(ren[i]);
}
}else if (integer==6) {
daBanren+=renShu;
for (int i = 0; i < renShu; i++) {
daBan.add(ren[i]);
}
}else {
System.out.println(map.get(integer)+"\t岁数不符合要求,无法分配班级");
}
}
System.out.println("小班人数有"+xiaoBanren);
System.out.println("中班人数有"+zhongBanren);
System.out.println("大班人数有"+daBanren);
}
}
结果
key==1 value==一岁小哥
key==2 value==李九,张三
key==3 value==李四,李八,李十
key==4 value==李七,王五
key==5 value==李六
key==6 value==李六
------------------------
key==1 value==一岁小哥
key==2 value==李九,张三
key==3 value==李四,李八,李十
key==4 value==李七,王五
key==5 value==李六
key==6 value==李六
---------------------------------
一岁小哥 岁数不符合要求,无法分配班级
小班人数有5
中班人数有3
大班人数有1
本来想着把年龄和姓名关联起来,然后按年龄排序把姓名分到不同的班。然鹅,map存值相同key值,新value会把就vale顶替。百度一下,大都为重写map的hashCode()和equals()方法
。发现看不太懂。看了这位老哥写的:?
迫于无奈想到重写put方法
.代码如上
重写put在存储之前加判断,判断之前是否存在相同key,存在就取出其value将其与新value组合,然后调用父类方法写入。取出时string.split(regex)分割出不同value.此方法只适用于string类型value
后来还要排序分组,但是发现已经拍好,研究
key为integer
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put(7, "saodjf");
map.put(3, "Iuadh");
map.put(4, "sdfask");
map.put(1,"sdhfka");
Set<Integer> keys = map.keySet();
for (Integer integer : keys) {
System.out.println("key=="+integer+"\tvalue=="+map.get(integer));
}
key==1 value==sdhfka
key==3 value==Iuadh
key==4 value==sdfask
key==7 value==saodjf
key为char类型
public static void main(String[] args) {
HashMap<Character, String> map = new HashMap<Character, String>();
map.put('d', "sdhfa");map.put('r', "adfas");map.put('s', "sdjflkajs");
map.put('e', "");
Set<Character> keys = map.keySet();
for (Character character : keys) {
System.out.println("key=="+character+"\tvalue"+map.get(character));
}
key==d valuesdhfa
key==e value
key==s valuesdjflkajs
key==r valueadfas
key为string类型
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("a", "我是1");map.put("s", "我是2");map.put("g", "我是3");
map.put("h", "我是4");map.put("v", "我是5");
Set<String> keys = map.keySet();
for (String string : keys) {
System.out.println("key=="+string+"\tvalue=="+map.get(string));
}
key==v value==我是5
key==g value==我是3
key==s value==我是2
key==a value==我是1
key==h value==我是4
string类型无自动排序。为撒嘞