学習の地図コレクションのJavaの基礎

1マップのコレクションとは何ですか?

私は、マップのコレクションストレージの使用が関係に対応するオブジェクトのコレクションを持っていると思います。インタフェース地図<K、V> K地図キーホルダ型値マップV型関係、属性のセットは、二つに格納され、一方は、に対応するキーを検索するためのキーであるキー値であります生徒の学校、私たちのアイデンティティーに似た値と、私は一から一です。実際には、これは比較することができ、コレクションのコレクション:図:

1.1地図共通セットサブクラス:

クラスAbstractMap、属性、AuthProvider、のConcurrentHashMap、ConcurrentSkipListMapの、EnumMap、HashMapの、ハッシュテーブル、のIdentityHashMap、のLinkedHashMap、PrinterStateReasons、プロパティ、プロバイダ、RenderingHintsが、SimpleBindings、TabularDataSupport、TreeMapを、するUIDefaults、のWeakHashMap

  • HashMapの:

基礎となるハッシュテーブル(配列+リンクリスト構造、jdk1.8鎖+ /赤黒木後アレイ)であり、シーケンシャルアクセスは同じ要素、順序付けられていないコレクションではありません。カスタム・データ・タイプでは、データの一意性を保証するためには、()ハッシュコードを書き直すと、キーの一意性を保証するための方法に等しくなければなりません

  • LinkHashMap:

同じことが、下地であるリスト+ハッシュテーブルの構造、ハッシュコードを書き換え固有データによって達成()および方法に等しくされ、順序集合、データが順次格納されていることを確認することができ、リンクされたリストとして多くを支払います。

一般的なコレクションで使用される1.2地図方法

APIドキュメント:

  • このマップ(オプション)で指定された指定されたキー値に関連付けられた、公共のV PUT(Kキー、V値)。

  • 地図から現在(オプション)、キーマップを削除した場合、パブリックV削除(オブジェクトキー)。

  • パブリックVの取得(オブジェクトキー)は、指定されたキーを持つマップでセットに対応する値を取得します。(バリュー)

  • 公共のセットのkeySet():セットコレクションに保存されているすべてのキーの地図コレクションを取得します。

  • パブリックブールのcontainsKey(オブジェクトキー)/のcontainsValue(Object値)

  • 公共の設定<のMap.Entry <K、V >>のentrySet():オブジェクトのコレクション内のすべてのキーのセットに地図を取得します。(セット設定)、設定値を保存したり、キー、マルチキー、決定されて決定します。

  • コードは以下の通りであります:

      private static void showPutMethod() {
          /**
           * put语法规则
           * 首次添加元素的时候,如果k的值是不重复的 则会返回一个null
           * 如果添加重复k的值 则第二次添加的v的值会把第一次v的值替换的 返回的是被替换的数值
           * k是不允许重复的 而value是可以重复的
           */
          Map<String, String> map = new HashMap<>();
          String put = map.put("zsb", "张博阳");
          String put1 = map.put("zsb", "昔年");
          String put2 = map.put("dsa", "褐瞳");
          String put3 = map.put("ewqe", "心塞");
          String put4 = map.put("zsgf", "昔年");
          System.out.println(map);
      }
    
      /**
       * remove(object k)指定k 返回v
       * 存在则有返回值
       * 不存在 返回null
       */
          private static void removeTestMethod() {
              Map<String, Integer> map = new HashMap<>();
      //        String person = map.put("海绵宝宝", "100");
      //        String person2 = map.put("派大星", "230");
      //        String person3 = map.put("章鱼哥", "321");
      //        String person4 = map.put("蟹老板", "456");
      
      //        String one = map.remove("海绵宝宝");
      //        System.out.println(one);//返回100
      
              //返回null
              Integer dsada = map.remove("dsada");
              System.out.println(dsada);//null
    
      }
    
          /**
               * get语法规则 输入数值 返回键的关系
               * 有键返回值数值
               * 没有键 返回空
           * */
      //map集合存储
          Map<String, String> mapList = new HashMap<>();
          String put = mapList.put("zsb", "一品御前带刀侍卫");
          System.out.println(put);
          mapList.put("派大星","赤犬星");
          mapList.put("海绵宝宝","黄袁宝宝");
          mapList.put("章鱼哥","青雉鱼");
          mapList.put("zsb","酷酷的张博阳");
          //get方法
          String zz = mapList.get("章鱼哥");
          System.out.println(zz);   // 返回青雉鱼
          System.out.println(mapList);
    
      
      /**
       * containsKey
       * 查询集合中是否包含该元素
       * 如果有 true
       * 没有 false
       */
      private static void containsMethod(){
          Map<String, String> map = new HashMap<>();
          String one = map.put("zsb", "保安队长");
          String two = map.put("zsb", "保安");
          String three = map.put("zsbaa", "保安");
          String four = map.put("zsbss", "保安");
    
    
          boolean zbs = map.containsKey("zsb");
          boolean zbs1 = map.containsKey("zdsadbs");
    
      
      //        System.out.println(zbs);//true
      //        System.out.println(zbs1);// false
    复制代码

コレクションの1.3ハッシュマップトラバーサル方法

この方法の一つ:

コレクションマップセットのコレクションに変換し、設定して、コレクションを使用することができて、我々はループすることができるようになりますのキーセット方法により、拡張forループ道、あなたを介しても、サイクルを反復子を使用することができる方法を。我々ループの後、我々はキーの値を取得し、地図には、メソッドを取得し、設定値の方法で得ることができる。示されているように

コードは以下の通りであります:

    Map<String, String> mapList = new HashMap<>();
    String put = mapList.put("zsb", "一品御前带刀侍卫");
    System.out.println(put);
    mapList.put("派大星","赤犬星");
    mapList.put("海绵宝宝","黄袁宝宝");
    mapList.put("章鱼哥","青雉鱼");
    mapList.put("zsb","酷酷的张博阳");
    
    
    //利用增强for循环
     /**
     * 通过keyset方法把 map集合里面的key的值存储打set集合里面,然后遍历set集合,即可得到key的数值,然后通过map的
     * get方法 通过key获得value 然后就完成了遍历
     */
    Set<String> setList = mapList.keySet();
    for (String s : setList) {// 这里可以直接写 :mapList.keySet();
        //现在拿到集合里面的value的数值了 然后通过map.get的方法 获得里面的数值
        String value = mapList.get(s);
        System.out.println(value);
    }
    //利用迭代器进行循环遍历
    System.out.println("-----------------");
    Iterator<String> iteratorSet = setList.iterator();
    while (iteratorSet.hasNext()) {
        String next = iteratorSet.next();
        String value2 = mapList.get(next);
        System.out.println(value2);
    }
复制代码

彼の内部のネストしたクラスによるメソッド呼び出し(エントリー)

地図コレクションが作成された場合、それが自動的に作成されたEntryオブジェクトは、キーと値の間の関係を記録するために使用されます。我々は、複数のエントリ地図コレクションを設定するには、ストレージから取り出したコレクション内のオブジェクトMap.entrySet方法することができ、残りは上記と同じである循環方式によって横断さに、しかしエントリインタフェースは、彼は二つの方法がありますされていますそれぞれGETKEYとのgetValue方法およびキーと値を取得します。コードは以下の通りであります:

public static void main(String[] args) {
    Map<String, String> mapList = new HashMap<>();
    String put = mapList.put("zsb", "一品御前带刀侍卫");
    mapList.put("派大星","赤犬星");
    mapList.put("海绵宝宝","黄袁宝宝");
    mapList.put("章鱼哥","青雉鱼");
    mapList.put("zsb","酷酷的张博阳");

    //增强for循环的方式
    for (Map.Entry<String, String> entryList :mapList.entrySet()){
        String key = entryList.getKey();
        String value = entryList.getValue();
        System.out.println(key + value);
    }

    //利用迭代器方式
    Set<Map.Entry<String, String>> entries = mapList.entrySet();
    Iterator<Map.Entry<String, String>> iterator = entries.iterator();
    while (iterator.hasNext()) {
        Map.Entry<String, String> next = iterator.next();
        String key = next.getKey();//分别获取到key的数值
        String value = next.getValue();//分别获得value的数值
        System.out.println(key + value);
    }
}
//同样是for循环为什么这个entry不能同Map.get()方法获得value值,把获得next穿进去,为什么返回值是null
//我探究了一下 之前的Map集合创建了set对象 里面存储的是key的集合,当然可以用get方法传递key获得value
//而entry就不同了,集合里面存储的是循环遍历之后的entry对象,又不是key当然获取不出来了。
复制代码

カスタム・データ・タイプ

キーなどのカスタムデータ型は、それを書き換える必要がある場合は一意とequalsメソッドにgetCode保証債券の内部

コードは以下の通りである:カスタムデータ型:

 @Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    People people = (People) o;
    return age == people.age &&
            Objects.equals(name, people.name);
}

@Override
public int hashCode() {

    return Objects.hash(name, age);
}


主方法如下:
public static void main(String[] args) {
    getMethod();
    getMethod2();

}
private static void getMethod(){
    HashMap<People, String> peopleStringHashMap = new HashMap<>();
    peopleStringHashMap.put(new People("海绵宝宝",20),"蟹黄堡厨师");
    peopleStringHashMap.put(new People("派大星",20),"海绵宝宝最好的朋友");
    peopleStringHashMap.put(new People("章鱼哥",30),"蟹黄包的收银员");

    //遍历集合
    for (People people : peopleStringHashMap.keySet()) {
        String value = peopleStringHashMap.get(people);
        System.out.println(value);
    }
}
private static void getMethod2() {
    HashMap<People, String> peopleStringHashMap = new HashMap<>();
    peopleStringHashMap.put(new People("海绵宝宝",20),"蟹黄堡厨师");
    peopleStringHashMap.put(new People("派大星",20),"海绵宝宝最好的朋友");
    peopleStringHashMap.put(new People("章鱼哥",30),"蟹黄包的收银员");

    //通过创建entry对象的方式
    Set<Map.Entry<People, String>> entries = peopleStringHashMap.entrySet();
    //创建迭代器
    Iterator<Map.Entry<People, String>> iterator = entries.iterator();
    while (iterator.hasNext()) {
        Map.Entry<People, String> entry = iterator.next();
        People key = entry.getKey();
        String value = entry.getValue();
        System.out.println(key + value);
    }
}
复制代码

1.3 linkHashMap和linkHashtable

  • linkHashMap HashMapのは、複数のリンクのセットと比較され、アクセスの順序は、これが最大の違いであることを保証することができます
  • LinkHashtable底部は、ハッシュテーブルであるシングルスレッド遅い、(1.2の後ハッシュマップ置換)NULL値と構造のセットを記憶することができないながら

おすすめ

転載: juejin.im/post/5d4ccc466fb9a06b130f1147