Map 映射 通过某一个key可以直接定位到一个value值
存储的方式 键值对 存储 key-value
key无序无重复 value无序可重复
key无序还是一样 指的是存入顺序与取得顺序不一致
key无重复 元素不能一样;
1.map基本使用
HashMap
TreeMap
Properites(读取文件的信息)
HashMap
1.包 java.util
2.如何创建对象
3.基本方法
增删改查
put 存放一组映射关系 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获取value
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 更适合遍历轮询;(Vector)
LinkedList 更适合插入和删除
Stack LIFO
Set家族无重复 存储元素希望自动去掉重复元素用这个
Hash 性能更高
Tree 希望存进去的元素自动去重复 同时还能自动排序
Map家族k-v 通过唯一的k快速找寻v用这个;
Hash 性能更高
Tree 系统存进去的元素key自动排序;
6.登录小流程
import java.util.*; //3种方式实现登录 public class Test0521{ /* public String login(String name,String password){ String[] a=new String[]{"张三","李四","王五"}; int[] p=new int[]{123,456,789}; for(int i=0;i<a.length;i++){ if(a[i].equals(name)){ if(p[i]==Integer.parseInt(password)){ return "登录成功!"; } break; } } return "账号或密码错误!!"; } public static void main(String[] args){ Test0521 x=new Test0521(); System.out.println(x.login("张三","789")); } */ /* private ArrayList<String> a=new ArrayList<String>(); { a.add("张三-123"); a.add("张四-456"); a.add("李留-789"); } public String login(String name,String password){ for(int i=0;i<a.size();i++){ String[] ap=a.get(i).split("-"); if(ap[0].equals(name)){ if(ap[1].equals(password)){ return "登录成功!"; } break; } } return "账号或密码错误!!"; } public static void main(String[] args){ Test0521 x=new Test0521(); System.out.println(x.login("李留","89")); } */ /* private HashSet<String> a=new HashSet<String>(); { a.add(new String("张三-123")); a.add("张四-456"); a.add("李留-789"); } public String login(String name,String password){ Iterator<String> m=a.iterator(); while(m.hasNext()){ String[] n=m.next().split("-"); if(n[0].equals(name)){ if(n[1].equals(password)){ return "登录成功!"; } break; } } return "账号或密码错误!!"; } public static void main(String[] args){ Test0521 x=new Test0521(); System.out.println(x.login("三","789")); } */ /* static HashMap<Integer,String> a=new HashMap<Integer,String>(); { a.put(0,"zhangsan-123"); a.put(1,"lihua-456"); a.put(2,"老刘-789"); } public String login(String n,String p){ Set<Integer> keys=a.keySet(); Iterator<Integer> ti=keys.iterator(); while(ti.hasNext()){ Integer i=ti.next(); String[] ac=a.get(i).split("-"); if(ac[0].equals(n)){ if(ac[1].equals(p)){ return "登录成功!"; } break; } } return "账号或密码错误!!"; }//HashMap 方式一 */ private HashMap<String,String> a=new HashMap<String,String>(); { a.put("zhangsan","123"); a.put("lihua","456"); a.put("老刘",""); } public String login(String n,String p){ /* Set<String> keys=a.keySet(); Iterator<String> ti=keys.iterator(); while(ti.hasNext()){ String i=ti.next(); String ps=a.get(i); if(i.equals(n)){ if(ps.equals(p)){ return "登录成功!"; } break; } }//方式一 return "账号或密码错误!!"; */ if((a.get(n))!=null && p.equals(a.get(n))){ return "登录成功!";//个人认为(a.get(n))!=null && 可不需要 }//HashMap 方式二 return "账号或密码错误!!"; } public static void main(String[] args){ Test0521 x=new Test0521(); System.out.println(x.login("老刘klj","")); } }
7.HashMap底层的数据结构存储
散列表的形式 数组+链表
import java.util.*; import java.util.Map.Entry; public class Test0521{ public static void main(String[] args){ HashMap<Integer,String> a=new HashMap<Integer,String>(); a.put(0,"abc");//增 a.put(9,"ab"); a.put(2,"a2b"); a.put(0,"a0b"); a.put(8,"ab"); System.out.println(a); System.out.println(a.remove(0));//删除 System.out.println(a); //a.put(2,"bc");//改 a.replace(2,"bc");//改 System.out.println(a); System.out.println(a.get(2));//查 System.out.println(a); //获取集合的全部key Set<Integer> keys=a.keySet();//Set集合 Iterator<Integer> it=keys.iterator(); while(it.hasNext()){ Integer k=it.next(); System.out.println(k+"---"+a.get(k)); }//遍历方式1 System.out.println("有效元素个数:"+a.size()); Set<Entry<Integer,String>> mn=a.entrySet(); Iterator<Entry<Integer,String>> ii=mn.iterator(); while(ii.hasNext()){ Entry<Integer,String> nn=ii.next(); Integer kk=nn.getKey(); String vv=nn.getValue(); System.out.println(kk+"-->"+vv); }//遍历方式2 } }
------------------------------------------------------------------------------------------------------------
TreeMap 自然有序 按照Unicode编码自然有序
1.java.util包
2.构造方法
无参数 带map参数
3.常用方法
put get remove replace size
4.底层数据结构的存储
红黑二叉树
import java.util.*; public class Test0521{ public static void main(String[] args){ TreeMap<Integer,String> a=new TreeMap<Integer,String>(); a.put(0,"a"); a.put(1,"b"); a.put(7,"k"); a.put(3,"ef"); System.out.println(a); } }