java中的Map、集合框架collection(1)

HashMap的3大要素:hash函数、数组、单向链表;
HashMap 里面是一个数组,然后数组中每个元素是一个单向链表。
嵌套的Entry实例,Entry 包含四个属性:key, value, hash 值和用于单向链表的 next。
capacity:当前数组容量,始终保持 2^n,可以扩容,扩容后数组大小为当前的 2 倍。
loadFactor:负载因子,默认为 0.75。
这里写图片描述

//JDK8中HashMap的散列值算法
int hash(Object key){
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
        //  其中 key.hashCode()调用的是key键值类型自带的哈希函数,返回int型散列值。
        }   

由于HashMap的存储主要依赖于hash值的计算,因此选用Integer、String这些类作为键会提高HashMap的效率。
根据散列值h可以确定该对象的保存位置(用来访问数组下标)h&(length-1)等价于h%length(但是&比%具有更高的效率),其中length为底层数组的长度,总是为2的n次方。
HashMap默认初始数组长度为16,负载因子初始0.75。
这里写图片描述

//Integer的hashcode()即为其值本身;
//String的hashcode()计算值为:{即s[0]*31^(n-1)+s[1]*31^(n-2)+..........+s[n-1]其中n为字符串长度
                    String str = "aszz";
                    char s[] = str.toCharArray();
                    int h = 0;
                    if(s.length>0){
                        for (int i = 0; i < s.length; i++) {
                        h = h * 31 + s[i];
                        }  
                    }   
                    return h;                   
                    }
    Set<Map.Entry<K,V>> entrySet()条目集合
    Map.Entry<K,V>是Map<K,V>的嵌套内部接口,表示集合的以<K,V>映射形式的元素条目
    Set<k> keySet() 键集合
//对于Map<String,String> map=new HashMap<String,String>();的几种遍历方式:
        //1.for each Map.entrySet
        for(Map.Entry<StringString> entry:map.entrySet()){
        entry.getKey();
        entry.getValue();
        }
        //2.直接调用Map.entrySet的集合迭代器
        Iterator<Map.Entry<StringString>> iterator=map.entrySet().iterator();
        while(iterator.hasNext()){
        Map.Entry<StringString> entry=iterator.next();
        entry.getKey();
        entry.getValue();
        }       
        //3.for each Map.keySet()在调用get()获取
        for(String key :map.keySet()){
        map.get(key );//通过key获取value
        }

collection集合框架下两个接口List和Set。都具有:
判断功能 
boolean contains(Object obj):判断集合中是否包含指定的元素
boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(只有包含指定集合中所有的元素才叫包含)
boolean isEmpty():判断集合是否为空(指集合的数据元素为空)
获取功能
Iterator iterator():迭代器,集合专有的遍历方式
把集合转换为数组
Object[] toArray():把集合转成数组,可以实现集合的遍历

猜你喜欢

转载自blog.csdn.net/qq_34777858/article/details/80824461