Map:采用key_value存储数据,
Map接口:存储的是一对一对的数据,采用key-value存放
|---->HashMap:主要实现类,线程不安全,效率高;允许添加null的key或null的value
|------>LinkedHashMap:HashMap的子类,可以实现按照添加1的顺序实现遍历
对于频繁的遍历操作,建议使用此接口实现类
|---->TreeMap:可以按照元素的指定属性的大小实现遍历
|---->HashTable:古老实现类.线程安全,效率低,不允许添加null的key或null的value
|---->properties:常用来处理属性文件,key和value都是String类型
Map的结构:<1.Map中的key是无序的,不可重复的,key构成的集合是Set
<2.Map中的value是无序的,可以重复的,value构成的集合是Collection
<3.Map中的键值构成一个entry
<4.Map中的entry是一个set集合,无序,不可重读的
Map的常用方法:
增:put(Object key, Object value)将指定的key-value添加到map对象 ,putAll(Map m)将m中的所有键值对返回map中去
删:remove(Object,key)指定移除对应key的key-value对,并返回value
改:put(Object key,Object value)将指定的key-value修改到map对象
查:get(Object key):获取指定key的value containsValue(Object value)是否包含指定的value
长度:size()
遍历:KeySet()返回所有key构成的set集合 values()返回所有Value值构成的Collection集合 enterySet()返回所有的key- vlaue构成的set集合
HashMap:
HashMap的底层实现
jdk7:数组+单向链表
HashMap map =new HashMap();//entry[] table=new Entry[16];
........
map.put(key1,vlaue1);//key1-value1会封装到一个entry对象中,将此对象放于table数组中
jdk8:数组+单向链表+红黑树
HashMap的常用方法:
@Test public void test() { Map map =new HashMap<>(); Map map1=new TreeMap<>(); //增,put() map.put("aa", 98); map.put("bb", 948); map.put("vv", 938); map.put("dd", 928); map.put("gg", 918); System.out.println(map); //改put() map.put("aa", 111); System.out.println(map); //删remove() map.remove("gg"); System.out.println(map); //查get() System.out.println(map.get("aa")); } @Test public void test1() { Map map =new HashMap<>(); //增,put() map.put("aa", 98); map.put("bb", 948); map.put("vv", 938); map.put("dd", 928); map.put("gg", 918); //返回所有的key构成的Set集合 Set keySET=map.keySet(); System.out.println(keySET); //遍历key构成的Set集合 Iterator it=keySET.iterator(); for (Object object : keySET) { System.out.println(object); } //返回所有value构成的Collection集合 Collection c=map.values(); //遍历values构成的Collection集合 Iterator it1=c.iterator(); while (it1.hasNext()) { System.out.println(it1.next()); } //返回键值对构成的Set集合 Set s=map.entrySet(); Iterator it2=s.iterator(); for (int i = 0; i < s.size(); i++) { System.out.println(it2.next()); } }