zoukankan      html  css  js  c++  java
  • Java精选笔记_集合【Map(映射)接口】

    Map(映射)接口

    简介

    该集合存储键值对,一对一对的往里存,并且键是唯一的。要保证map集合中键的唯一性。
    从Map集合中访问元素时,只要指定了Key,就能找到对应的Value。
    关键字是以后用于检索值的对象。

    常见操作

    1.添加

        put(key,value):  当存储的键相同时,新的值会替换老的值,并将老值返回。如果键没有重复,返回null。

        void putAll(Map);

    2.删除

        void clear():             清空 

        value remove(key) :删除指定键

    3.判断

        boolean isEmpty(): 

        boolean containsKey(key):       是否包含key 

        boolean containsValue(value) :是否包含value 

    4.取出

        int size():                  返回长度 

        value get(key) :        通过指定键获取对应的值。如果返回null,可以判断该键不存在。

        当然有特殊情况,就是在hashmap集合中,是可以存储null键null值的。 

        Collection values():  获取map集合中的所有的值。 

    获取map中的所有元素

    原理:map中是没有迭代器的,collection具备迭代器,只要将map集合转成Set集合,可以使用迭代器了。

    之所以转成set,是因为map集合具备着键的唯一性,其实set集合就来自于map,set集合底层其实用的就是map的方法

    把map集合转成set的方法:

        Set<k> keySet();                 //将map中所有的键存到Set集合。

        Set<k,value> entrySet(); //取的是键和值的映射关系。

        Entry就是Map接口中的内部接口;

    为什么要定义在map内部呢?

    entry是访问键值关系的入口,是map的入口,访问的是map中的键值对。


    方式一:keySet()方法。

    可以将map集合中的键都取出存放到set集合中。对set集合进行迭代。迭代完成,再通过get方法对获取到的键进行值的获取

        Set keySet = map.keySet(); 
        Iterator it = keySet.iterator(); 
        while(it.hasNext()) {
            Object key = it.next(); 
            Object value = map.get(key);
            System.out.println(key+":"+value);
        }


    方式二:entrySet()方法。

    先获取集合中的所有的映射关系,然后从映射关系中取出键和值

    在Map中,还提供了一个values()方法,通过这个方法可以直接获取Map中存储所有值的Collection集合

        Set<map.entry<String,String>> entrySet = map.entrySet(); 
        Iterator<map.entry<String,String>> it = entrySet.iterator();
        while(it.hasNext()) { 
            Map.Entry me = (Map.Entry)it.next(); 
            System.out.println(me.getKey()+":"+me.getValue()); 
        }

    hashTable散列表

    Map接口中还有一个实现类Hashtable,它在存取元素时速度很慢,目前基本上被HashMap类所取代。

    底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的


    HashMap集合

    是Map接口的一个实现类,它用于存储键值映射关系,但必须保证不出现重复的键

    底层是哈希表数据结构,允许使用null值和null键,是不同步的,效率高。键的类必须重写hashCode和equals方法

    HashMap类使用散列表实现Map接口

    HashMap集合迭代出来元素的顺序和存入的顺序是不一致的

    HashMap实现Map并扩展AbstractMap

    在向HashMap中添加元素时,不但要将元素添加,还要为每个元素设置一个Hash码。Hash码不只可以为数字,同样它也可以为字符串


    LinkedHashMap类

    是HashMap的子类,和LinkedList一样也使用双向链表来维护内部元素的关系,使Map元素迭代的顺序与存入的顺序一致。


    构造方法

        HashMap()方法                                              构造一个默认的散列映射

        HashMap(Map m)方法                                   用类m中的元素初始化散列映射

        HashMap(int Capacity)方法                           将散列集合的容量初始化为capacity

        HashMap(int Capacity, float fillRadio)方法     用参数同时初始化散列映射的容量和填充比

    主要方法

        public void clear()                                        删除映射中所有映射关系

        public boolean containsKey(Object key)     判断HashMap中是否包指定的键的映射关系,如果包含则返回true

        public boolean containsValue(Object value)     判断HashMap中是否包指定的键值的映射关系

        public V get(Object key)                 返回参数key键在该映射中所映射的值

        public boolean isEmpty()                判断HashMap中是否包含键-值映射关系,如果不包含则返回true

        public V put(K key, V value)            在映射中放入指定值与指定键

        public void putAll(Map m)               将指定映射的所有映射关系复制到此映射中

        public int size()                               返回映射中键-值映射关系的数目

        public V remove(Object key)          删除映射中存在该键的映射关系

    TreeMap集合

    TreeMap集合是用来存储键值映射关系的,其中不允许出现重复的键

    底层是二叉树结构,线程不同步,可以用于给Map集合中的键进行排序。键必须是Comparable接口的子类型

    在TreeMap中是通过二叉树的原理来保证键的唯一性,这个TreeSet集合存储的原理一样,因此TreeMap中所有的键是按照某种顺序排列的。

    TreeMap类通过使用树实现Map接口。TreeMap提供了按排序顺序存储关键字/值对的有效手段,同时允许快速检索。不像散列映射,树映射保证它的元素按照关键字升序排序。

    TreeMap实现SortedMap并且扩展AbstractMap。本身并没有定义其他方法。


    构造方法

        TreeMap()方法                         构造一个空树的映射

        TreeMap(Map m)方法              用类m中的元素初始化树映射,使用关键字按自然排序

        TreeMap(Comparator comp)    构造一个空的基于树的映射通过使用Comparator来排序

        TreeMap(SortedMap sm)方法  用从sm的输入来初始化一个树映射

    方法

        clear()                                     从此TreeMap中删除所有映射关系

        clone()                                    返回TreeMap实例的浅表复制

        comparator()                           返回用于对此映射进行排序的比较器,如果此映射使用它的键的自然顺序,则返回null

        containsKey(Objectkey)         如果此映射包含对于指定的键的映射关系,则返回true

        containsValue(Objectvalue)    如果此映射把一个或多个键映射到指定值,则返回true

        entrySet()                               返回此映射所包含的映射关系的set视图

        firstKey()                                返回有序映射中当前第一个键

        get(Objectkey)                       返回此映射中映射到指定键的值

        headMap(KtoKey)                 返回此映射的部分视图,其键严格小于toKey

        keySet()                                返回此映射中所包含的键的Set视图

        lastKey()                               返回有序映射中当前最后一个键


    Properties(属性)集合

    是hashtable的子类,具备map集合的特点,里面存储的键值对都是字符串。文件流和键值对相结合 就用此集合

    是集合中和IO技术相结合的集合容器

    该对象的特点:可以用于键值对形式的配置文件,可以操作键盘的数据。

        //设置和获取元素。
        Properties prop =new Properties();
        prop.setProperty("张三","30");//添加,修改
        sop(prop);
        prop.getProperty("键");
        循环获取
       Set<String> names=prop.stringPropertyNames();
       for(String s : names) {
            prop.getProperty(s);
        }


    Properties存取配置文件,将文本a.txt中的数据存到集合中进行操作。

    步骤:1.用一个六和info.txt关联
               2.读取一行数据,用该行数据用"="尽情切割

               3.封号左边作为建,右边作为值,存储到Properties集合中即可

        BufferedReader bufr=new BufferedReader(new FileReader("a.txt"));
        String line=null;
        Properties prop =new Propertites();
        while((line=bufr.readLine())!=null) {
        String[] arr =line.split("=");
        prop.setProperty(arr[0],arr[1]);
    }
    简便方法
        Properties prop =new Propertites();
        FileInputStream fis=new FileInputStream("a.txt");
        //将流中的数据加载进集合
        prop.load(fis);
        prop.list(System.out);


    练习,用于记录应用程序运行次数,如果使用次数已经到,就给出注册提示。

        Properties prop=new Properties();
        File file=new File ("count.ini");
        if(!file.exists()) {
            file.createNewFile(); 
            FileInputStream fis=new FileInputStream(file);
            prop.load(fis); 
            int count=0;
            String value=prop.getProperty("time");
            if(value!=null) {
                count=Integer.parseInt(value);
                if(count>=5) {
                    System.out.println("您使用的次数已到");
                    return;
                }
            }
            count++;
            prop.setProperty("time", count+"");
            FileOutputStream fos=new FileOutputStream(file);
            prop.store(fos, "");
            fos.close();
            fis.close();
        }
  • 相关阅读:
    Docker容器案例:应用 Mysql
    rpm 命令参数使用详解
    MySQL中的两种临时表
    Yum本地Rpm库设置
    编程学习 博客
    yum -------包安装库
    Linux 基础 —— RPM
    在CentOS上编译安装PostgreSQL
    Linux上安装JDK环境变量配置
    yum_rpm(利用dvd建立本地yum库)
  • 原文地址:https://www.cnblogs.com/justdoitba/p/7582142.html
Copyright © 2011-2022 走看看