地図とそのサブクラス

ディレクトリ

地図

ここに画像を挿入説明
主な方法:

方法 説明
パブリックVプット(Kキー、V値) データの保存、交換はキーが存在して発生した場合、それは古いデータを返し、ノーリターンのnullはありません
パブリックVの取得(オブジェクトキー) 対応するコンテンツによってキー問い合わせ
パブリックV削除(オブジェクトキー) キーに従って、対応するコンテンツを削除します。
公共int型のサイズ() コレクションの長さを取得します。
パブリックコレクション値() すべてのコンテンツに戻ります
公共のセットのkeySet() (キーを繰り返すことはできません)すべてのキーを取得します。
公共の設定<のMap.Entry <K、V >>のentrySet() Map.Entryのコレクションのフォーム内のすべてのコンテンツを返します。

例:

 Map<String, String> map = new HashMap<>(10);
        //put():增加数据
        map.put("1","one");
        map.put("2","two");
        map.put("3","three");
        map.put("4","four");
        map.put("5","five");
        //get():通过key查询value的值
        System.out.println("get()->"+map.get("3"));
        //remove():通过key删除内容
        System.out.println("remove()->"+map.remove("2"));
        //size():获取长度
        System.out.println("sie()->"+map.size());
        //values():返回所有的values值
        System.out.println("values()->"+map.values());
        //keySet():返回所有的key值
        System.out.println("keySet()->"+map.keySet());
        //将所有的数据以 key = value 的集合形式输出
        System.out.println("entrySet()->"+map.entrySet());

結果:

get()->three
remove()->two
sie()->4
values()->[one, three, four, five]
keySet()->[1, 3, 4, 5]
entrySet()->[1=one, 3=three, 4=four, 5=five]

**コレクションと地図:**

1、コレクション出力や保存のために、クエリと保存にマップします。

2、コレクションは、単一の値セットで、マップオブジェクトのコレクションも、第二病院です。

要約:

図1に示すように、優先順位値のセットは、単一の使用リスト、リストインタフェースの優先順位のArrayListを満たします。

2、Mapインタフェース、Mapインタフェースの優先HashMapのサブクラスに属するキーでデータを照会する必要があります。

3、すべての出力龍イテレータインターフェースのセット。

HashMapの

ここに画像を挿入説明

引数なしのコンストラクタ:

public HashMap() {
        this.loadFactor = 0.75F;	//阈值为75%,当超过75%时进行扩容
    }

拡張:

final HashMap.Node<K, V>[] resize() {
        HashMap.Node<K, V>[] oldTab = this.table;
        int oldCap = oldTab == null ? 0 : oldTab.length;	//旧的容量
        int oldThr = this.threshold;
        int newThr = 0;
        int newCap;
        if (oldCap > 0) {	//旧的容量大于0
            if (oldCap >= 1073741824) {		//当旧的容量大于或等于1073741824
                this.threshold = 2147483647;	//1073741824 * 2赋值给threshold,阈值
                return oldTab;
            }
			//旧的容量赋值给新的容量 * 2 < 1073741824 && 旧的容量 >= 16,第一次不会进入
            if ((newCap = oldCap << 1) < 1073741824 && oldCap >= 16) {//hashMap每次扩容1倍
                newThr = oldThr << 1; //新的阈值 = 旧的阈值 * 2 
            }
        } else if (oldThr > 0) {	//旧的容量 > 0 (???) 可能是当大于int的范围后变负数,才会进去
            newCap = oldThr;	//新的容量 = 旧的阈值
        } else {
            newCap = 16;	//第一次容量为扩充为16
            newThr = 12;	//第一次阈值为12
        }

        if (newThr == 0) {
            float ft = (float)newCap * this.loadFactor;
            newThr = newCap < 1073741824 && ft < 1.07374182E9F ? (int)ft : 2147483647;
        }
    
    	this.threshold = newThr;	//新的阈值赋值给threshold
        HashMap.Node<K, V>[] newTab = new HashMap.Node[newCap];	
        this.table = newTab;

データ性能保証:

int binCount = 0;
在while循环中,当binCount = 7,存储的数据其实为8个,binCount从零开始。
if (binCount >= 7) {	//当binCount等于7时,转成红黑树
    this.treeifyBin(tab, hash);	//会进行树状结构转换(红黑树自动修复,保证查询性能)
}

++binCount;	

Laidakedःashanap

ここに画像を挿入説明

LinkedHashMapはHashMapの、のHashMapのサブクラスであり、その実現のメカニズムはほとんど同じですが、HashMapのは、順序付けられていないストレージであるあなたが秩序ある利用のLinkedHashMapに格納されたデータが欲しいので、のLinkedHashMapは、整然としたストレージです。

TreeMapの

TreeMapのは、自動的に小から大へ、ソートのASCIIコードのサイズに応じてソートされた、キーがnullにすることはできません。
C:\ Users \ユーザーtanxiang \のAppData \ローミング\ Typora \ typora-ユーザー画像\画像20200302202732178.png)]

例:

public class Demo02 {
    public static void main(String[] args) {
        Map<String,String> map = new TreeMap<>();
        map.put("1","one");		//ASCII码 49
        map.put("a","again");	//ASCII码 97
        map.put("2","two");		//ASCII码 50
        map.put("A","Action");	//ASCII码 65
        System.out.println(map);
    }
}

結果:

{1=one, 2=two, A=Action, a=again}
公開された61元の記事 ウォンの賞賛0 ビュー2180

おすすめ

転載: blog.csdn.net/sabstarb/article/details/104619982