Java - 工具类8(Map集合类) July 17,2019

Map   映射   通过某一个key可以直接定位到一个value值
   存储的方式以  键值对  存储   key-value
   key无序无重复   value无序可重复
   key无序还是一样,指的是存入顺序与取得顺序不一致
   key无重复当然指的是 元素不能一致
 1.map基本使用
    HashMap
    TreeMap
    Properties
  
 HashMap
 1.包 java.util
 2.如何创建对象
 3.基本方法
    增删改查
    增put(key,value) 存放一组映射关系   key-value
   1.key存储的顺序与取得顺序不同
   2.不同的key可以存储相同的value
   3.key若有相同的 则将 原有的value覆盖而不是拒绝存入(跟set刚好相反)
    删E = remove(key);
    改put(key,value1)    put(key,value2)
       replace(key,newValue)
    查E = get(key)
  遍历map集合? key不一定什么样
     获取到所有的key 遍历key 通过key获取value
     Set<Key> = keySet()获取全部的key
     Set<Entry> = entrySet();
    size();
 4.除了上述几个常用的方法外  其他API中提供的方法
    clear   containsKey(key)   containsValue(value)
    getOrDefault(key,defaultValue);如果key存在就返回对应的value 若没有找到则返回默认值
    isEmpty()
    putAll(map)
    putIfAbsent(key,value);//如果key不存在才向集合内添加  如果key存在就不添加啦
 5.map集合在什么情形下用?
    1.想要存储一组元素
       数组  or  集合    如果存储的元素以后长度不变用数组  如果长度以后不确定 用集合
    2.如果发现长度以后不确定--->集合
       List  Set  Map
      List家族有序的   存储有顺序用这个
        ArrayList  更适合遍历轮询
        LinkedList 更适合插入和删除
        Stack  LIFO
     Set家族无重复    存储元素希望自动去掉重复元素用这个
        Hash 性能更高
        Tree 希望存进去的元素自动去重复  同时还能自动排序
     Map家族k-v      通过唯一的k快速找寻v用这个
        Hash 性能更高
        Tree 希望存进去的元素key自动排序
 6.登录小流程
  能体会每一个不同集合的特点
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;

public class LoginService {

    //设计一个方法  用来登录认证  一维数组
//    private String[] userBox = new String[]{"123","1234","12345"};
//    private int[] passwordBox = new int[]{123,1234,12345};
//    public String loingForArray(String name,String password){
//        for(int i=0;i<userBox.length;i++){
//            if(userBox[i].equals(name)){
//                if(passwordBox[i]==Integer.parseInt(password)){
//                    return "登录成功";
//                }
//                break;
//            }
//        }
//        return "用户名或密码错误";
//    }

    //设计一个方法  用来登录认证---ArrayList
//    private ArrayList<String> userBox = new ArrayList<String>();
//    {
//        userBox.add("123-123");
//        userBox.add("1234-1234");
//        userBox.add("12345-12345");
//    }
//    public String loginForList(String name,String password){
//        for(int i=0;i<userBox.size();i++){
//            String[] value = userBox.get(i).split("-");//一个人的信息 v[0] v[1]
//            if(value[0].equals(name)){
//                if(value[1].equals(password)){
//                    return "登录成功";
//                }
//                break;
//            }
//        }
//        return "用户名或密码错误";
//    }

    //设计一个方法  用来登录认证-----Set
//    private HashSet<String> userBox = new HashSet<String>();
//    {
//        userBox.add("123-123");
//        userBox.add("1234-1234");
//        userBox.add("12345-12345");
//    }
//    public String loginForSet(String name,String password){
//        Iterator<String> it = userBox.iterator();
//        while(it.hasNext()){
//            String[] value = it.next().split("-");
//            if(value[0].equals(name)){
//                if(value[1].equals(password)){
//                    return "登录成功";
//                }
//                break;
//            }
//        }
//        return "用户名或密码错误";
//    }


    //设计一个方法   用来登录认证---map     name(唯一)  pass
    private HashMap<String,Integer> userBox = new HashMap<String,Integer>();
    {
        userBox.put("123",123);
        userBox.put("1234",1234);
        userBox.put("12345",12345);
    }
    public String loginForMap(String name,String password){
        Integer realPassword = userBox.get(name);//null
        if(realPassword!=null && realPassword.equals(Integer.parseInt(password))){//名存在
                return "登录成功";
        }
        return "用户名或密码错误";
    }


}

 


 7.HashMap底层的数据结构存储
    散列表的形式 数组+链表
    Person对象存入HashMap中?  可以
    hashCode方法---->不同的对象 可以产生相同的hashCode码的
    不同的hashCode码-->不同的对象
 
TreeMap  自然有序  按照Unicode编码自然有序
   map集合中的key需要可比较的   key的对象需要实现Comparable接口
 1.java.util包
 2.构造方法
    无参数  带map参数
 3.常用方法
    put  get   remove  replace  size
 4.底层数据结构的存储
    红黑二叉树
posted @ 2019-07-17 23:05  亿贫如洗杨道长  阅读(109)  评论(0编辑  收藏  举报