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排序
- Java交換map的key和value值Java
- map判斷值是否存在需要注意的問題
- 【SSL2514】幼兒園數學題II
- Java春招面試複習:有關於Java Map,應該掌握的8個問題Java面試
- java8 實現map以value值排序Java排序
- Java : List中 根據map的某個key去重Java
- Map集合的按時間排序方法排序
- Nginx每天莫名自動重啟問題Nginx
- HashMap原始碼:聊聊Map的遍歷效能問題(一)HashMap原始碼
- map切片排序排序
- Android studio glide包重複問題AndroidIDE
- form表單按enter鍵自動提交的問題ORM
- Java IO 建立檔案解決檔名重複問題Java
- webpack dll打包重複問題優化Web優化
- element UI元件樣式重複問題UI元件
- 資料檢視的重複問題
- 領釦LintCode演算法問題答案-1320. 包含重複值演算法
- 優化 Go 中的 map 併發存取優化Go
- Java中List集合轉Map集合報錯:Duplicate keyJava
- js基礎-20-js物件賦值時的key值問題JS物件賦值
- 元件複用傳值(待解決問題)元件
- map自定義排序,根據鍵或者值排隊排序
- 併發請求的重複插入問題
- 解決winform窗體重複建立問題ORM
- 記一次坑爹的golang 二維map判斷問題Golang
- Java使用Redis實現分散式鎖來防止重複提交問題JavaRedis分散式
- 答讀者問:關於隱式 id 重複的問題
- 使用Map標籤指定點選區域時的相容性問題
- React獲取資料,假如為陣列,使用map出現的問題React陣列
- 解決mybatis用Map返回的欄位全變大寫的問題MyBatis
- MySQL order by limit 分頁資料重複問題MySqlMIT
- Vue echarts 繫結事件重複執行問題VueEcharts事件
- 快速解決mongodb出現id重複問題MongoDB
- 去除重複字母(不同字元的最小序列)問題字元
- 如何解決自增列賦值的問題賦值
- 用struct做unordered_map的keyStruct
- 解決移動端複製問題