• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

集合里的Map接口

武飞扬头像
人世间的烟火
帮助1

Map接口:双列数据,保存具有映射关系的"key-value"的集合(用于一对一对的数据)
HashMap:是map的主要实现类,线程不安全,效率高
Hashtable:是一个古老的map实现类.jdk1.0就有了,线程安全的,效率低
这两者的实现原理和功能都相同
TreeMap:实现自然排序和定制排序
LinkedHashMap:实现按输入的顺序方式输出
学新通
map常用方法:

  • 1.添加

         Object put(Object key,Object value);向集合去添加"key-value"  key不允许重复
    
  • 2.添加多个元素

     	void putAll(Map map); 向当前集合中添加map集合中所有的元素
    
  • 3.删除

             Object remove(Object key) 删除指定的key对应key-value元素,并返回value
             Object remove(Object key,Object value)  删除指定的key-value元素,并返回boolean值判断是否删除成功
    
  • 4.修改

             可以通过put修改对应key的value值
    
  • 5.元素的查询

             Object get(Object key)获取指定key对应的value
    
package SE.day0304;

import java.util.HashMap;
import java.util.Map;

public class MapDemo01 {
    public static void main(String[] args) {
        /*
        map常用方法:
            1.添加
            Object put(Object key,Object value);
                向集合去添加"key-value"  key不允许重复
            2.添加多个元素
                void putAll(Map map);
                向当前集合中添加map集合中所有的元素
            3.删除
                Object remove(Object key) 删除指定的key对应key-value元素,并返回value
                Object remove(Object key,Object value)
                    删除指定的key-value元素,并返回boolean值判断是否删除成功

             4.修改
                可以通过put修改对应key的value值
             5.元素的查询
                Object get(Object key)获取指定key对应的value

         */
        Map map1=new HashMap();
        map1.put("皮卡丘",20);
        map1.put("皮卡丘",18);//key相同,此时的value覆盖掉原来的key的value
        map1.put("妙蛙种子",18);
        System.out.println(map1);
        Map map2=new HashMap();
        map2.put("杰尼龟",20);
        map2.putAll(map1);
        System.out.println(map1.get("皮卡丘"));


        /*
        //删除key值相同的元素,并返回value
        System.out.println(map2.remove("皮卡丘"));
        //删除key-value相同的元素,并返回boolean值
        System.out.println(map2.remove("杰尼龟", 20));
        */
    }
}

学新通
  • 6.获取map集合的key或者value

     获取key:  Set keySet();返回map集合中所有的key(key不可重复)
     获取value: Collection values();返回map集合中所有的value(value可重复可不重复)
     获取key-value: Set entrySet();返回集合所有的key-value的键值对
    
package SE.day0304;

import java.util.Collection;
import java.util.HashMap;
import java.util.Set;

public class MapDemo02 {
    public static void main(String[] args) {
        HashMap hm=new HashMap();
        hm.put("皮卡丘",10);
        hm.put("喷火龙",15);
        hm.put("杰尼龟",13);
        Set s=hm.keySet();
        for (Object o:s) {
            System.out.println(o);
        }
        Collection c=hm.values();
        for (Object o: c) {
            System.out.println(o);
        }
        Set s1=hm.entrySet();
        for(Object o:s1){
            System.out.println(o);
        }

    }
}

学新通
  • HashMap底层实现原理:

         底层结构:
             1.JDK7:hashMap底层采用的是数组 链表  底层创建数组
             2.JDK8:hashMap底层采用的是数组 链表 红黑树  底层添加元素的时候在创建数组
     
         hashMap:
             当hashMap中添加元素超过了数量大小的0.75倍,自动扩容为原来的2倍
         HashMap有个子类叫LinkedHashMap;底层维护一个链表,用来使集合看起来是按照插入顺序存储的
    
package SE.day0304;

import java.util.HashMap;

public class HashMapDemo {
    public static void main(String[] args) {
        HashMap hm=new HashMap();
        hm.put("皮卡丘",10);
        hm.put("喷火龙",15);
        /*
        先调用"皮卡丘"所在hashCode方法,计算出hash的值
        此时hash值金国某种特定的算法,计算出在数组中存放的位置
            如果指定位置没有元素,"皮卡丘",16添加成功
            如果指定位置有元素,那就去比较两个key所得类的hash值
                如果hash值相同,比较两个对象的equals方法
                    如果equals比较方法返回
                    false,添加成功
                    true,则使用当前对象的key的value去替换原来的value
                如果hash值不相同,则"皮卡丘"添加成功

         */
    }
}

学新通
  • Hashtable是一个古老的map实现类,JDK1.0就有了,不同于HashMap

         Hashtable是线程安全的,效率低
         Hashtable与HashMap实现原理与功能相同,底层都是使用哈希标结构,查询速度会快一些
         可以互相使用,但是Hashtable中不可以使null作为key和value,HashMap可以
         Properties作为Hashtable的子类,该类的对象用于处理属性文件
             由于属性文件里面的key和value都是String类型的,所以
    
             key     value
             name=root
             pwd=123456
             url=jdbc:mysql
    
package SE.day0304;


import java.io.FileInputStream;
import java.util.Properties;

/*
     Hashtable是一个古老的map实现类,JDK1.0就有了,不同于HashMap
        Hashtable是线程安全的,效率低
        Hashtable与HashMap实现原理与功能相同,底层都是使用哈希标结构,查询速度会快一些
        可以互相使用,但是Hashtable中不可以使null作为key和value,HashMap可以
        Properties作为Hashtable的子类,该类的对象用于处理属性文件
            由于属性文件里面的key和value都是String类型的,所以

            key     value
            name=root
            pwd=123456
            url=jdbc:mysql

 */
public class HashtableDemo01 {
    public static void main(String[] args) throws Exception {
           //事先在同一个项目里面创建一个jdbc.properties文件
        //使用输入流读取指定的配置文件中的内容
        FileInputStream fis=new FileInputStream("jdbc.properties");
        //创建Properties对象用来都读配置文件
        Properties p=new Properties();
        //使用Properties对象加载指定的配置文件
        p.load(fis);
        String username=p.getProperty("username");
        String password=p.getProperty("password");
        System.out.println(username "="  password);
    }
}

学新通

向指定文件写内容

package SE.day0304;

import java.io.FileOutputStream;
import java.util.Properties;

public class HashtableDemo02 {
    public static void main(String[] args) throws Exception {
        //给指定的文件创建输出流
        FileOutputStream f=new FileOutputStream("jdbc.properties");
        //创建Properties对象
        Properties p=new Properties();

        //先设置key和value
        p.setProperty("url","jdbc");
        p.setProperty("username","root");
        //将设置key和value写到文件中
        p.store(f,"hashtable");
    }
}

学新通

自然排序

package SE.day0304;


import java.util.TreeMap;

public class TreeMapDemo {
    public static void main(String[] args) {
        TreeMap treeMap=new TreeMap();
        treeMap.put("444",10);
        treeMap.put("555",10);
        treeMap.put("111",10);
        treeMap.put("666",10);
        System.out.println(treeMap);
        TreeMap tm2=new TreeMap();
        tm2.put(new User(20,"444",20),60);
        tm2.put(new User(2,"666",19),50);
        tm2.put(new User(6,"888",20),80);
        System.out.println(tm2);
    }
}
class User implements Comparable{
    int id;
    String name;
    int age;


    public User(int id, String name, int age) {
        this.name = name;
        this.age = age;
        this.id = id;
    }

    @Override
    public int compareTo(Object o) {
        if (o instanceof User){
            User u=(User)o;
            //return Integer.compare(this.id,u.id);id升序
            return this.name.compareTo(u.name);//名字升序
        }else{
            throw new RuntimeException("类型不匹配");
        }
    }

    @Override
    public String toString() {
        return "User{"  
                "id="   id  
                ", name='"   name   '\''  
                ", age="   age  
                '}';
    }
}
学新通

效果图如下:
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgejhei
系列文章
更多 icon
同类精品
更多 icon
继续加载