java map存取重複值、幼兒園分班問題、map按key自動排序問題
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型別無自動排序。為撒嘞
相關文章
- Java 之 Map 的鍵,值多重排序問題解決方案Java排序
- map物件拷貝問題物件
- java中關於Map的九大問題Java
- Java春招面試複習:有關於Java Map,應該掌握的8個問題Java面試
- java中Map根據Map的value取keyJava
- java8 實現map以value值排序Java排序
- Map按照key和value進行排序排序
- Map集合的按時間排序方法排序
- 面試題:陣列按列排序的問題面試題陣列排序
- session的存取問題Session
- sql重複插入問題SQL
- Java : List中 根據map的某個key去重Java
- Java面試題:如何對HashMap按鍵值排序Java面試題HashMap排序
- 請教一個從Collection到Map保持排序順序不變的問題排序
- Nginx每天莫名自動重啟問題Nginx
- MySQL自增列的重複值問題(r12筆記第25天)MySql筆記
- android包重複問題Android
- map切片排序排序
- HashMap原始碼:聊聊Map的遍歷效能問題(一)HashMap原始碼
- 有重複元素的排列問題
- 【Java面試題】34 List 、Map、Set 區別?Java面試題
- json keyname mapJSON
- Java IO 建立檔案解決檔名重複問題Java
- webpack dll打包重複問題優化Web優化
- 資料檢視的重複問題
- C#按字串中的數字排序問題C#字串排序
- 字串排序問題字串排序
- group by 排序問題排序
- Collections排序問題!!排序
- 中文排序 問題排序
- java mapJava
- 優化 Go 中的 map 併發存取優化Go
- map自定義排序,根據鍵或者值排隊排序
- Java 中的map - The Map Interface.Java
- Map根據Value排序排序
- map/reduce實現 排序排序
- 元件複用傳值(待解決問題)元件
- 併發請求的重複插入問題