0

Java コレクションは初めてです。私はマップを調べていたので、Java がマップを提供したように教えてください。独自のマップを作成することはできますか? という名前のマップとしましょうMineMap。これを達成する方法を教えてください。ググってたらこんなの発見。

public interface MyMap
{
    public void put(Object key,Object value);
    public Object get(Object key);
    public int size();
    public Set keySet();
    public Set entrySet();
    public interface MyEntry
    {
        public Object getKey();
        public Object getValue();
    }
}

とその実装:

class MySimpleMap implements MyMap
{
    private ArrayList keys;
    private ArrayList values;
    private int index;

    public MySimpleMap()
    {
        keys=new ArrayList();
        values=new ArrayList();
        index=0;
    }  

    public void put(Object key,Object value)
    {
        keys.add(key);
        values.add(value);
        index++;
    }

    public Object get(Object key)
    {
        int i=keys.indexOf(key);
        if (i>=0)
            return values.get(i);
        else
            return null;
    }

    public int size()
    { 
        return index;
    }

    public Set keySet()
    {
       HashSet set=new HashSet();
       set.addAll(keys);
       return set;
    }

    //Nested class starts...
    class MySimpleEntry implements MyMap.MyEntry
    {
       Object key;
       Object value;

       public MySimpleEntry(Object k,Object v)
       {
           key=k;
           value=v;
       }

      public Object getKey()
      {
          return key;
      }

      public Object getValue()
      {
          return value;
      }
 }// Nested class ends.

 public Set entrySet()
 {
     HashSet set=new HashSet();
     for (int i=0;i<index;i++)
     {
        Object k=keys.get(i);
        Object v=values.get(i);
        MySimpleEntry temp=new MySimpleEntry(k,v);
        set.add(temp);
     }
     return set;
 }
 }

最後に、これを使用していたクラスは次のとおりです。

class MyMapDemo
{
    public static void main(String arr[])
    {
        MySimpleMap map=new MySimpleMap();
        map.put("Amit","Java");
        map.put("Rahul",".Net");
        map.put("Nitin","SQT");
        map.put("Ajay","PHP");
        map.put("Raman","Java");
        System.out.println("There are "+map.size()+" elemenets in the map...");
        System.out.println("contents of Map...");
        Set s=map.entrySet();
        Iterator itr=s.iterator();
        while(itr.hasNext())
        {
            MyMap.MyEntry m=(MyMap.MyEntry) itr.next();
            System.out.println(m.getKey()+"\t"+m.getValue());
        }
        Scanner in=new Scanner(System.in);
        System.out.println("Enter Name to find out course, ctrl+c to terminate...");
        while(true)
        {
            System.out.println("Name:");
            String n=in.nextLine();
            System.out.println("Course is:"+map.get(n));
        }
 }
}

しかし、もっと簡単な実装が必要です。

4

1 に答える 1

6

あなたは初心者で、独自のマップを実装したいとおっしゃいました。初心者レベルでマップを書くのは時期尚早です。コレクション フレームワークは、いくつかのデータ型の最適化された実証済みの実装を既に提供しています。車輪を再発明するのではなく、それらを理解することが重要です。

  • Java ライブラリ ソースを簡単に入手して、コレクション クラスがどのように実装されているかを確認できます。それは最先端の開発であり、多くの詳細をカバーしています。

  • 実装について。

ただし、これまでに発見したものを直接マップとして分類することはできません。間違いなく同様のことをします。

  • 一般的な実装ではありません。
  • Map を実装していないため、既存の Map 型変数で impl を逆に使用できます。
  • Collections.classのアルゴリズムは使用できません。

上記の機能を組み込むなどの実装を作成したい場合があります。

// Hash map java library defined as follows.
public class HashMap<K,V>
    extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable


// Hence, you may want to write this.
public class MyMap<K,V>
    extends AbstractMap<K, V> // May skip this
    implements Map<K,V>, Cloneable, Serializable // important
{
   //Now it will ask to write all the methods which are defined in Map interface.
   //These are minimum methods required for Map operations.
}
于 2012-04-17T03:37:17.920 に答える