HashMapクラスを継承し、toString()メソッドを書き換えます.

3153 ワード

package collections_example;import java.util.*;/****@author andy*///Personクラスclass Person{private String name;private int age;Person(String name,int age){this.name=name;this.age=age;}の定義
//Personクラスを書き換えるtoString()メソッド@Overridepublic String toString(){return"[name=]+this.name+",age="+this.age+"}}
//HashMapSonクラスを定義し、HashMapクラスclass HashMapSon extends HashMap{//HashMapSonクラスのtoString()メソッド@Overridepublic String(){Set>keyset=this.entrySet();Iterator>i=keyset.iterator();if(!i.hasNext())return";StringBuffer buffer=new StringBuffer();//buffer.append("{");for(;);{Map.Entry me=i.next();K key=me.getKey();V value=me.getValue();buffer.append("+key.toString()+",");buffer.append("+value.toString()+"/n");if(!i.hasNext())return buffer.toString();    }}}
//以下は元のtoString()メソッドで、コンパイルの問題があります./*public String toString(){Set keyset=this.keySet();Iterator ir=keyset.iterator();StringBuffer temps=null;String s=null;System.out.println("出力HashMapの要素:");while(ir.hasNext(){//System.out.println(ir.next().toString();K key=(K)ir.next();V value=(V)ththis(V).get(ir.next();temps=temps.append(key.toString()+"+value.toString());}s = new String(temps);return s;}*///メインクラスpublic class HashMap_Sample1 {public static void main(String[] args){HashMapSon hm = new HashMapSon();hm.put(1003,new Person("tom",21));hm.put(1001,new Person("keith",32));hm.put(1002,new Person("jack",24));hm.put(1000,new Person("jerry",21));System.out.println(hm);}}
実行結果は次のとおりです.
キーは1001、値は[name=keith、age=32]キーは1000、値は[name=jerry、age=21]キーは1003、値は[name=tom、age=21]キーは1002、値は[name=jack、age=24]
以下に説明します.
HashMapクラスのtoString()メソッドはjavaから継承する.util.AbstractMap、方法の説明は以下の通りです.
public String toString()

このマッピングの文字列表現を返します.文字列の表示形式は、キー値マッピング関係リストからなり、マッピングに従います.
EntrySetビューの反復器が返す順序をカッコ(
"{}")を囲みます.隣接するマッピング関係は文字で
「,」(カンマとスペース)で区切られています.各キー-値マッピング関係は、キー、後に等号(
「=」)、後に関連する値が表示されます.キーと値の両方を通過String.valueOf(Object)は文字列に変換されます.
ソースコードは次のとおりです.
    public String toString() { Iterator> i = entrySet().iterator(); if (! i.hasNext())     return "{}";
 StringBuilder sb = new StringBuilder(); sb.append('{'); for (;;) {     Entry e = i.next();     K key = e.getKey();     V value = e.getValue();     sb.append(key   == this ? "(this Map)": key);     sb.append('=');     sb.append(value == this ? "(this Map)": value);     if (! i.hasNext())  return sb.append('}').toString();     sb.append(", ");  } }
  ,Entry Map         。
public static interface Map.Entry
 

アイテムのマッピング(キー-値のペア).Map.entrySetメソッドは、このような要素に属するマッピングされたcollectionビューを返します.マッピング・アイテムの参照を得る唯一の方法は、このcollectionビューの反復によって実現されます.これらのMap.Entryオブジェクトは反復中にのみ有効です.より正確には、反復器がアイテムを返した後に下位マッピングが変更された場合、マッピング・アイテムの一部の動作setValueによってマッピング・アイテム上で操作を実行する以外は不確定です.
だからIterator>i=entrySet().iterator(); Entryの参照iを取得しました.