映射集-Map
2016-05-19 21:30
295 查看
Map
称之为键值对集合,键值都是对象存在,键对象在Map中不能重复出现,就像Set集合中元素不能重复出现。同样系统并不会把真正的对象放到Map中,而是存储的对象的引用。常用方法:
void clear()//移除Map当中的所有映射关系 boolean containsKey(Object o)//查询Map中是否存在o键对象,存在返回true Object get(Object o)//返回Map中键对象为o的映射值 boolean isEmpty()//判断是否为空,空返回true Object put(Object key,Object value)//向Map中添加键值对 void putAll(Map m)//将m中的所有键值对加入到调用的Map当中 Object remove(Object o)// 若果存在o键对象,移除此键值对,并返回该键的映射值 int size()//返回Map中键值对的个数
HashMap
实现了接口Map,既不是Ordered也不是Sorted,通过对键计算哈希码来决定存储,不保证存储的顺序,该键允许null,但是只能出现一次。
因为底层的存储方式是按照计算哈希码决定的,所以在以自己的类对象当做键对象的时候需要复写hashcode()和equals()方法,保证正确使用。
HashTable
基本功能与HashMap类似,只是HashTable是同步的,特别注意的是该类中不允许出现null的键对象。
LinkedHashMap
底层是通过双链表实现,是一个Ordered类型的,按照插入顺序的Map,插入和删除的效率比HashMap底,但是遍历的效率高。
SortedMap与TreeMap
SortedMapSortedMap继承自Map,是一个Sorted类型的,不管插入顺序如何,总是按键的天然顺序自动排序,因此其对象之间必须具有可比性,也就是实现Comparable接口。
常用方法
Object firstKey()//返回SortedMap中的第一个键对象,也是最小的键对象 Object lastKey()//返回SortedMap中的最后一个键对象,也是最大的键对象 SortedMap headSet(Object toElement)//返回一个小于toElement的键对象并且不包括该对象的SortedMap SortedMap tailSet(Object fromElement)//返回一个包含该对象并且大于fromElement键对象的SortedMap SortedMap subSet(Object toElement,Object fromElement)//返回一个两者之间的SortedMap,并且是[)左闭右开
TreeMap
TreeMap继承SortedMap,具备SortedMap的所有特征。因为键对象不能出现重复,所以自定义类对象作为键对象的时候需要实现CompareTo方法或者自定义比较器。
//自定义比较器 class myComparator extends Comparator{ public int compare(Object o1,Object o2){ Integer i1 = (Integer)o1; Integer i2 = (Integer)o2; return i2.intValue()-i1.intValue(); } main(){ TreeMap t = new TreeMap(new myComparator);//以自定义的比较器作为比较顺序 } }
映射的遍历
因为Map实现都是按键进行存储的,一般采用取出所有键然后取出对应的值。获取键或者值集合的方法
public Set keySet()//返回一个包含Map所有键对象的Set public Collection values()//返回一个包含Map所有值的集合
通过上述方法,如果修改返回的Set和Collection中的数据,则Map中对应的键值对也会发生相应的更改。
HashMap hm = new HashMap(m); Set key = hm.keySet(); Iterator it = key.iterator(); while(it.hasNext()){ Integer key = (Integer)it.next(); String value = (String)hm.get(key); }
通过Map转成Set集合就可以迭代,那么有另一个方法:entrySet,该方法将键和值的映射关系作为对象存储到了Set集合中,而这个映射关系的类型就是Map.Entry(接口)类型(例如结婚证这种映射关系)。
Map<Integer,String> map=new HashMap<Integer,String>(); Set<Map.Entry<Integer,String>> entrySet=map.entrySet(); //返回值是映射关系的Set集合 Iterator<Map.Entry<Integer,String>> it=entrySet.iterator(); while(it.hasNext()){ Map.Entry<Integer,String> me = it.next(); Integer key=me.getKey(); //通过Map.Entry对象的getKey,getValue获取其中的键和值 String value=me.getValue(); System.out.println(key+":"+value); }
相关文章推荐
- Android中的WebView进行直接加载网页
- 使用calcite为对象List封装SQL接口
- Java环境变量配置
- LeetCode-35.Search Insert Position
- Smarty{foreach}
- USB主从设备(USB Host and Accessory)
- 第4章:分治策略 ——最大字数组问题
- Struts2中集合在jsp中循环显示
- TCP/IP、Http、Socket的区别
- 数据仓库介绍
- MySQL5.7.12新密码登录方式及密码策略
- oracle拼接字段和group by的使用
- 简单研究跨域的几种方法
- ArrayBlockingQueue和LinkedBlockingQueue的使用
- 《JAVA异常处理》ArrayIndexOutOfBoundsException异常与OutOfMemoryError错误
- 计算机硬件组成
- kettle运行时报错 could not create java virtual machine
- BNU 33693——Problemsetting——————【枚举+最大流】
- Windows下SQLMAP的安装图解
- zebra结构分析三[syslog模块]