Map概念
要同时存储两个元素,他们之间有映射关系,每个键不能重复,每个键只能映射到一个值。
存储键值对,并且键是唯一的。
1.添加。
put()如果添加的键原来有值,后添加的值会覆盖前面的值,并返回之前的值。
2.删除
remove()按键删除。
3.判断
4.获取
get(object key)
size()
value()拿值value返回的是值的集合。。。
HashTable 底层是哈西数据结构,不可以存入null键null值,线程同步。
HashMap 底层是哈西表数据结构,允许使用nul键和null值,线程不同步。效率高。
TreeMap 底层是二叉树结构,不同步,可以给键排序。
和Set很像,Set底层使用的就是Map结构。其实是平行x轴的函数。
无序。。put会返回来先添加的值,后添加的值会覆盖原有的值
Map元素取出方式
没有显示迭代器,map中所有的键存入Set集合,因为Set具备迭代,取出所有的键后,根据get获取值。
1.keyset()返回set集合。迭代器:取出了set集合用迭代器取键。。。get(键)将map集合转化成set,再取键取值。
2.entrySet 里面存放的时是关系,把关系取出来。返回map.entry,将map集合中德映射关系存入到Set集合中。my.entry是个接口,entry接口是Map接口里面内部接口,Map需要直接访问MapSet中的数据,内部嵌套类,没有Map就没有Map.entry.
当数据之间存在映射关系的时候,考虑使用map集合
import java.util.*; public class MapTest { public static void main(String[] args) { // TODO Auto-generated method stub Map<String,Integer> hm= new HashMap<String,Integer>(); hm.put("mia", 52); hm.put("mfg", 53); hm.put("mua", 51); System.out.println(hm); Set<Map.Entry<String, Integer>> mm=hm.entrySet(); for( Map.Entry<String, Integer> en:mm){ System.out.println(en.getKey()+">>>"+en.getValue()); }} }//打印结果 /*{mia=52, mua=51, mfg=53} mia>>>52 mua>>>51 mfg>>>53*/
当数据之间存在映射关系的时候,考虑使用map集合。
Map扩展知识
map集合被使用是因为具备映射关系。预热班,就业班里面都有学生,学生编号和学生也是映射关系,大集合里面嵌套小集合。一对多映射,大集合就是集合的名字?更大的集合时传智播客,这个学校体系建好后,我想要获取学生信息。
通过遍历传智播客,获取所有教室的信息,在获取所有学生的信息
2.将编号姓名封装成为学生。房间以前存的是map集合,现在存的是List集合
理解Map
Map中最重要的两个方法就是put()和get()。对于put()方法,跟Set的要求一样,每个键都必须有equals()方法,如果使用HashMap()会在放入键的时候,调用hashCode(),确保键的唯一性。设置hashCode的时候要注意两点:1.不要单纯使用对象的哈西地址值,因为两个对象的地址值虽然不一样但是内容一样,有时我们要把他们当成一个对象。2.不要依赖于可变数据,如果我存进去后更改了数据,也有可能导致取的时候找不到该键。
黑马程序员——集合基础知识(Map)