笔记==>map
来源:互联网 发布:分析淘宝网的特点 编辑:程序博客网 时间:2024/06/05 19:57
Map接口
如果程序中存储了几百万个学生,而且经常需要使用学号来搜索某个学生,那么这个需求有效的数据结构就是Map。
Map是一种依照键(key)存储元素的容器,键(key)很像下标,在List中下标是整数。
在Map中键(key)可以使任意类型的对象。Map中不能有重复的键(Key),每个键(key)
都有一个对应的值(value)。
一个键(key)和它对应的值构成map集合中的一个元素。
Map中的元素是两个对象,一个对象作为键,一个对象作为值。键不可以重复,但是值可以重复。
双列集合:
-------------| Map 如果是实现了Map接口的集合类,具备的特点: 存储的数据都是以键值对的形式存在的, 键不可重复,值可以重复。 ----------------| HashMap 底层也是基于哈希表实现的。 ----------------| TreeMap TreeMap也是基于红黑树(二叉树)数据结构实现 的, 特点:会对元素的键进行排序存储。 ----------------| Hashtable 底层是哈希表数据结构,线程是同步的,效率较低,被HashMap 替代。
Map与Collection的异同:
1.Map与Collection在集合框架中属并列存在。
2.Map存储的是键值对,collection存储的是单个值。
3.Map存储元素使用put方法,Collection使用add方法
4.Map集合没有直接取出元素的方法,而是先转成Set集合,在通过迭代获取元素
5.Map集合中键要保证唯一性
也就是Collection是单列集合, Map 是双列集合。
总结:
Map一次存一对元素, Collection 一次存一个。Map 的键不能重复,保证唯一。
Map 一次存入一对元素,是以键值对的形式存在.键与值存在映射关系.一定要保证键的唯一性.
Map接口的常用方法:
添加:
1、V put(K key, V value) /*(可以相同的key值,但是添加的value值会覆盖前面的,返回值是前一个, 如果没有就返回null)*/ 2、putAll(Map<? extends K,? extends V> m) // 从指定映射中将所有映射关系复制到此映射中(可选操作)。
删除
1、remove() //根据键删除一条map中的数据,返回的是该键对应 的值。 2、clear() //清空集合中的所有数据。
获取
1:value get(key); //根据指定的键获取对应的值;可以用于判断键是否存在的情况。 //当指定的键不存在的时候,返回的是null。
判断:
1、boolean isEmpty() //长度为0返回true否则false2、boolean containsKey(Object key) //判断集合中是否包含指定的key3、boolean containsValue(Object value) //判断集合中是否包含指定的value
长度:
Int size() // 获取map集合键值对个数
遍历Map的方式:
1、//将map 集合中所有的键取出存入set集合。 Set<K> keySet() //返回所有的key对象的Set集合, 再通过get方法获取键对应的值。2、 values() ,//获取所有的值. Collection<V> //values()不能获取到key对象3、Map.Entry对象 推荐使用 Set<Map.Entry<k,v>> entrySet() //将map 集合中的键值映射关系打包成一个对象, // Map.Entry对象通过Map.Entry 对象的getKey,getValue获取其键和值。
map集合遍历方式一: 使用keySet方法进行遍历
缺点:keySet方法只是返回了所有的键,没有值。
//keySet()把Map集合中的所有键都保存到一个Set类型的集合对象中返回。 Set<String> keys = map.keySet(); Iterator<String> it = keys.iterator(); while(it.hasNext()){ String key = it.next(); System.out.println("键:"+ key+" 值:"+ map.get(key)); }
map集合遍历方式二:使用values方法进行遍历
缺点:values方法只能返回所有的值,没有键
//values() 把所有的值存储到一个Collection集合中返回。 Collection<String> c = map.values(); Iterator<String> its = c.iterator(); while(its.hasNext()){ System.out.println("值: " + its.next()); }
map集合的遍历方式三:使用entry方法遍历。
/*通过Map中的entrySet()方法获取存放Map.Entry<K,V>对象的Set集合。 用面向对象的思想将map集合中的键和值映射关系打包为一个对象,就是Map.Entry, 将该对象存入Set集合, Map.Entry是一个对象,那么该对象具备的getKey,getValue获得键和值。*/ Set<Map.Entry<String, String>> entrys = map.entrySet(); Iterator<Map.Entry<String, String>> itss = entrys.iterator(); while(itss.hasNext()){ Map.Entry<String, String> entry = itss.next(); System.out.println("键: "+ entry.getKey()+ " 值: "+ entry.getValue()); }
Map接口下的实现类—HashMap类
底层是哈希表数据结构,线程是不同步的,可以存入null键,null值。要保证键的唯一性,需要覆盖hashCode方法,
和equals方法。 HashMap的存储原理:
往HashMap添加元素的时候,首先会调用键的hashCode方法得到元素的哈希码值,然后经过运算
就可以算出该元素在哈希表中的存储位置。
情况1: 如果算出的位置目前没有任何元素存储,那么该元素可以直接添加到哈希表中。
情况2:如果算出 的位置目前已经存在其他的元素,那么还会调用该元素的equals方法与这个位置上的元素进行比较,
如果equals方法返回 的是false,那么该元素允许被存储,如果equals方法返回的是true,那么该元素被视为重复元素,
不允存储。
Map接口下的实现类—TreeMap类
TreeMap也是基于红黑树(二叉树)数据结构实现 的, 特点:会对元素的键进行排序存储。
TreeMap 要注意的事项:
往TreeMap添加元素的时候,如果元素的键具备自然顺序,那么就会按照键的自然顺序特性进行排序存储。
往TreeMap添加元素的时候,如果元素的键不具备自然顺序特性, 那么键所属的类必须要实现Comparable接口, 把键的比较规则定义在CompareTo方法上。
往TreeMap添加元素的时候,如果元素的键不具备自然顺序特性,而且键所属的类也没有实现Comparable接口, 那么就必须在创建TreeMap对象的时候传入比较器。
注意:当Comparable比较方式和Comparator比较方式同时存在时,以Comparator的比较方式为主;
注意:Set的元素不可重复,Map的键不可重复,如果存入重复元素如何处理?
Set元素重复元素不能存入add方法返回false
Map的重复健将覆盖旧键,将旧值返回。
Collections类与Arrays类
1.集合框架中的工具类:特点:该工具类中的方法都是静态的。
Collections:常见方法:
1,对list进行二分查找:
//前提该集合一定要有序。int binarySearch(list,key);//必须根据元素自然顺序对列表进行升级排序//要求list 集合中的元素都是Comparable 的子类。int binarySearch(list,key,Comparator);
2,对list集合进行排序。
sort(list); //对list进行排序,其实使用的事list容器中的对象的compareTo方法
sort(list,comaprator);//按照指定比较器进行排序
3,对集合取最大值或者最小值。
max(Collection)max(Collection,comparator)min(Collection)min(Collection,comparator)
4,对list集合进行反转。
reverse(list);
5,可以将不同步的集合变成同步的集合。
Set synchronizedSet(Set<T> s)Map synchronizedMap(Map<K,V> m)List synchronizedList(List<T> list)
2.Arrays:用于对数组操作的工具类
1,二分查找,数组需要有序
binarySearch(int[])binarySearch(double[])
2,数组排序
sort(int[])sort(char[])……
2,将数组变成字符串。
toString(int[])
3,复制数组。
copyOf();
4,复制部分数组。
copyOfRange():
5,比较两个数组是否相同。
equals(int[],int[]);
6,将数组变成集合。
List asList(T[]);
这样可以通过集合的操作来操作数组中元素,
但是不可以使用增删方法,add,remove。因为数组长度是固定的,会出现UnsupportOperationExcetion。可以使用的方法:contains,indexOf。。。
如果数组中存入的基本数据类型,那么asList会将数组实体作为集合中的元素。
如果数组中的存入的引用数据类型,那么asList会将数组中的元素作为集合中的元素。
- 笔记==>map
- 为什么不能Map map=new Map();
- HashMap map= new HashMap();Map map=new HashMap(); 不是Map map=new Map();
- Map笔记
- Map笔记
- Map<String, HttpSession> map=(Map<String, HttpSession>)
- mybatis resultType="map"
- mybatis resultType="map"
- Map map=new HashMap(); map是null吗?map.isEmpty结果是什么
- STL之map笔记
- C++ map学习笔记
- C++ Primer笔记 map
- java - Map使用笔记
- java笔记 Map集合
- google map 笔记
- Map集合学习笔记
- Map集合笔记1
- c++学习笔记 map
- Linq之Expression高级篇(常用表达式类型)
- 测试
- Linux查看系统信息命令
- 深度学习与神经网络-吴恩达(Part1Week4)-深度神经网络编程实现(python)-基础篇
- Docs » Learning the ArduPilot Codebase » EKF » Extended Kalman Filter Navigation Overview and Tuning
- 笔记==>map
- Laravel 5+ Bootstrap 4 分页器
- 【龙芯1c库】封装硬件SPI接口和使用示例
- vue 点击切换变色 tab 改变class 跳转链接
- 主成分分析(PCA)原理及推导
- 润乾报表 echarts统计图如何使用自定义主题
- 每日一练20171025
- 【jQuery】事件
- VM下的CentOs如何联网?