Java練習問題(二)


(一)テーマの説明
データテーブルレコードにはテーブルインデックスと数値が含まれています.テーブルインデックスと同じレコードをマージし、同じインデックスの数値を加算し、key値の昇順に出力します.
(二)説明を入力:
キー値のペアの数を入力し、ペアのindexとvalue値をスペースで区切って入力します.
(三)出力説明:
結合後のキー値ペアを出力(複数行)
例1
入力
コピー
4
0 1
0 2
1 2
3 4

しゅつりょく
コピー
0 3
1 2
3 4

 
(四)解答
import java.util.*;
//  Main    public  ,         Main    
public class Main{
    public static void main(String[] args){
        fun1();
    }
    //      :           KEY       key   ,    value      
    //                   ,                    
    public static void fun1(){
        Scanner sc = new Scanner(System.in);
        //          
        while(sc.hasNext()){
            //           ,  TreeMap    
            TreeMap map = new TreeMap<>();
            //      ,        
            int count = sc.nextInt();
            for(int i = 0;i < count;i++){
                //            
                int key = sc.nextInt();
                int value = sc.nextInt();
                //map   get  ,  key   value ;containsKey,containsValue    map       
                if(map.containsKey(key)){
                    //          key ,         ,get    key      value,        value 
                    //  
                    map.put(key,map.get(key)+value);
                }else{
                    map.put(key,value);
                }
                //        count 
            }
            //            ,        ,           ,  for     
            for(Integer m:map.keySet()){
                //  key  value,  map  set  
                System.out.println(m+" "+map.get(m));
                //      ,key value      ,     
            }
        }
        
    } 
}

 
(五)引申
(a)この問題の処理に同じkey値があるかどうかの考え方の転換は非常に重要であり,鍵値ペアを容器に格納し,後に入力した鍵値ペアに対して容器にcontainsがあるかどうかを判断するだけでよい.
(b)この問題はmap集合の遍歴に関連しており,これまであまり知られていなかったが,map集合の遍歴のいくつかの方式をまとめた.
(1)     :  key Set  ,  forEach    key ,   map get  , key   value 
package cn.shu.map;

import java.util.HashMap;
import java.util.Set;

public class MapAll {

	public static void main(String[] args) {
		
		HashMap hm = new HashMap<>();
		hm.put("zhangsan", 24);
		hm.put("lisi", 34);
		hm.put("JayChow", 54);
		hm.put("Stephen", 43);
        Set keySet = hm.keySet();
        for(String str:keySet){
        	int num = hm.get(str);
        	System.out.println(str+"  "+num);
        }
	}

}

//     :
lisi  34
JayChow  54
zhangsan  24
Stephen  43
(2)     :  map          entrySet,         key-value  ,          getKey()   getValue()    key value 。
public class MapAll {

	public static void main(String[] args) {
		
		HashMap hm = new HashMap<>();
		hm.put("zhangsan", 24);
		hm.put("lisi", 34);
		hm.put("JayChow", 54);
		hm.put("Stephen", 43);
        Set> entrySet = hm.entrySet();
        Iterator> it = entrySet.iterator();
        while(it.hasNext()){
        	Entry entry = it.next();
        	String key = entry.getKey();
        	Integer value = entry.getValue();
        	System.out.println(key+" "+value);
        }
	}

}
(3)     :  for  ,      ,   key-value     (entrySet()),  
     getKey() getvalue()  key value 
public class MapAll {

	public static void main(String[] args) {
		
		HashMap hm = new HashMap<>();
		hm.put("zhangsan", 24);
		hm.put("lisi", 34);
		hm.put("JayChow", 54);
		hm.put("Stephen", 43);

     for(Map.Entry  entry:hm.entrySet()){
    	 String key = entry.getKey();
    	 Integer value = entry.getValue();
    	 System.out.println(key+" "+value);
     }
	}
}