Java集合框架之图解(更新中...)

关于图我们该如何理解呢?!看看下面一个应用场景

假设程序存储了一百万个学生,而且需要按照其学号进行检索,那么怎样的方式有效?

     此时有效的数据结构就是图(map)   按照键值对存储元素的容器(键值可以是任意类型的对象,即泛型的威力),map中不能有重复的Key,但是value值可以相同,key和value组成一个条目,图中存储的为此条目。示意图如下(画的很糟糕,见谅!):

图的类型:

散列图:hashMap、链式散列图LinkedHashMap、树形图TreeMap。其都定义在Map接口中,其关系如下:

Map接口提供了查询、更新和获取集合的值和集合键值的方法。

更新方法(update methods)包括clear、put、putAll、remove

查询方法(query methods)包括containsKey、containsValue、isEmpty和sized

======================================================================================================

AbstractMap类是一个便利类,实现了Map接口中除了entrySet()方法之外的所有方法。

SortedMap接口扩展了Map接口,并保持映射以键值升序的顺序排列。除此之外还有附加方法firstKey()和lastKey()以返回最低键值和最高键值,headMap(toKey)返回值小于toKey的那部分图,而tailMap(fromKey)返回键值大于或等于fromKey的那部分图。

HashMap、LinkedMap和TreeMap类是Map接口的具体实现

三种具体实现类在何时使用时最有效呢?!答案在下面

HashMap:对于定位一个值,插入一个映射以及删除一个映射,适宜使用HashMap

LinkedHashMap:由其类名可知,LinkedHashMap是用链表实现来扩展HashMap类,LinkedHashMap支持图中的条目排序。而HashMap中的条目是没有顺序的,但在LinkedHashMap中,元素既可以按照他们插入图的顺序排序(插入排序)也可以按照他们最后一次被访问时的顺序,从最早到最晚(访问排序(access order))。无参构造方法是以插入顺序来创建LinkedHashMap对象的。要按访问顺序创建LinkedHashMap对象,应该使用构造方法LinkedHashMap(initialCapacity,loadFactor,true).

TreeMap在遍历排好顺序的键值时是最高效的。键值可以使用Comparable接口或Comparator接口类来排序。

看个简单的案例理解一下:

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;

public class testMap {
    public static void main(String[] args) {
        //create a HashMap
        Map<String, Integer> hashMap = new HashMap<String,Integer>();
        hashMap.put("张三", 32);
        hashMap.put("李四", 21);
        hashMap.put("王五", 22);
        
        System.out.println("Display entries is HashMap");
        System.out.println(hashMap + "
");
        
        //create a TreeMap from the previous HashMap
        Map< String, Integer> treeMap = new TreeMap<String,Integer>(hashMap);
        System.out.println("Display entries in ascending order of key");
        System.out.println(treeMap);
        
        //create a LinkedHashMap
        Map<String, Integer> linkedHashMap = new LinkedHashMap<String,Integer>(15,0.75f,true);
        linkedHashMap.put("张三",31);
        linkedHashMap.put("李四",28);
        linkedHashMap.put("王五",29);
        linkedHashMap.put("赵六",29);
        
        //Display
        System.out.println("Display entries in LinkedHashMap");
        System.out.println(linkedHashMap);
        
    }
}

那么运行结果呢:

Display entries is HashMap
{张三=32, 李四=21, 王五=22}

Display entries in ascending order of key
{张三=32, 李四=21, 王五=22}
Display entries in LinkedHashMap
{张三=31, 李四=28, 王五=29, 赵六=29}

HashMap的输出顺序是随机的,TreeMap中的条目是按键值的升序排列的,LinkedHashMap是按元素最后一次被访问的时间从早到晚排序的

抓住当下,不浮流年!无知本无罪,罪在明知不足,而不肯去学习!!!
原文地址:https://www.cnblogs.com/SamSarah/p/4893217.html