JAVA的Map的API等知识
来源:互联网 发布:c语言如何打开文件 编辑:程序博客网 时间:2024/05/29 10:44
Map接口
-->Map接口 定义的集合又称查找表,用于存储所谓“key-Value”的映射对,Key可以看作为Value的索引,作为Key的对象在集合中不可以重复,根据内部数据结构的不同,Map接口有多种实现类,其中常用的内部为Hash表实现的HashMap和内部为排序二叉树实现的TreeMap
-->方法
put()
map接口中定义了Map中存放元素put方法:V put(K key,V value ),如果在集合中已经包含该Key ,则做替换操作value,返回值为原来的key原;来所对应的value。Map要求Key不允许重复的:Map中不能出现两个key的equals判断为true.
get()
-->map接口中定义了从map中获取元素的get方法:V get(Object key),返回参数key所对应的value对象,如果不存在则返回null.
remove()
--> V remove(K k):将给定的key所对应的key-value对map中删除 返回值为对应的value,v=map.remove()
containsKey()方法:Map接口中定义了判断某个key是否在Map中存在:
-->boolean containskey(Object key)
测试代码:
import java.util.HashMap;import java.util.Map; /** * java.util.Map * Map 是一个接口,查找表 * Map是以Key-value对的形式保存数据的 * Map的常用实现类:HashMap(散列表,散列算法实现) * @author soft01 * /* public class Demo7 {public static void main(String[] args) {Map<String,Integer> map=new HashMap<String,Integer>();Integer value=map.put("生物",56);System.out.println(value);map.put("语文", 50);map.put("数学", 50);map.put("英语", 50);System.out.println(map);Integer value1=map.get("生物");System.out.println(value1);Integer value2=map.remove("语文");System.out.println(value2);System.out.println(map);}}
HashMap:
Hash表原理:
1.获取key的hashcode值,通过hash算法确定将要存储或者检索的空间
2 调用equals方法依次比较和空间中key比较,以链表的方式存入对应的空间,鉴于hashmap的存储原理,要妥善重写hashcode的方法:
3 重写hashocode方法
-->定义私有属性
—>在IDE中右键->源码—>构建hashcode和equals
/**
* 当一个类作为HashMap中的Key使用是,它的equals方法与hashcode
* 方法的结果直接影响散列表的查询性能
* APIs手册中明确说明:当我们重写一个类的equals方法是就应
* 当连同重写hashCode方法
* 重写hashcode方法是应遵循:
* 1:稳定性:当参与equal比较的属性的值没有发生改变的情况下,
* 多次调用hashCode方法返回的数字应当相同
* 2:一致性:当两个对象equals比较为true,
* 那么hashcode方法放回的数字必须相同,反过来
* 虽然不强制,但也尽量保证一致
* 因为:若两个hashcode值相同
* 但是equals方法比较的是false,在散列表中会产生链表
* 影响查询性能
*
* @author soft01
*
*/
public class Key { public Key(int x, int y) {super();this.x = x;this.y = y;}private int x;private int y;public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + x;result = prime * result + y;return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Key other = (Key) obj;if (x != other.x)return false;if (y != other.y)return false;return true;}}
测试代码:
import java.util.HashSet;import java.util.Set; public class Hashcode {private int i;public int getI() {return i;} public void setI(int i) {this.i = i;}@Overridepublic int hashCode() {return i%10;} @Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Hashcode other = (Hashcode) obj;if (i != other.i)return false;return true;}public static void main(String[] args) {Hashcode a=new Hashcode();Hashcode b=new Hashcode();a.setI(1);b.setI(1);Set<Hashcode> st=new HashSet<Hashcode>();st.add(a);st.add(b);System.out.println(a.hashCode()==b.hashCode());System.out.println(a.equals(b));}
1 hashCode 的存在主要是用于查找的快捷性
如 在Hashtable HashMap等,hashcode的用来在散列存储结构确定对象的存储位置的
2 如果两个对象相同,就是适用于equals()方法,那么这两个对象的hashcode一定相同
3 如果equlas被重写,那么相应的hashcode也应该被重写
4 hashcode 相同,并不表示对象相同,还要有equals()比较相同,这样他们就存储一个“篮子”
5 详细的知识点可以参考 -数觉结构 -里面的"哈希函数"一章的知识。
Map的遍历
使用keyset()方法
1 Map提供了三种遍历方式:
-遍历所有的Key
-遍历所有的Key-value
-遍历所有的value(不常用)
-->遍历各个检测点
Public void testkeyset(){
Set<String> keySet=ap.keySet();
for(String key:keySet){
System.out.println("检测点:"+key)
}
-->遍历所有的键值对的方法:
Set<Entry<K,V>> entrySet()
-该方法将当前每一组key-value对封装为一个Entry对象并存入一个Set集合中返回
Public void testEntrySet(){
Set<Entry<String,Integer>> entry=map.entrySet();
for(Entry<String,Integer> entry:entrySet){
System.out.println(entry.getKey()+":"+entry.getValue());}
}
测试代码:
import java.security.KeyStore.Entry;import java.util.Collection;import java.util.HashMap;import java.util.Map;import java.util.Set; public class Demo6 {public static void main(String[] args) {Map<String,Integer> map=new HashMap<String,Integer>();map.put("语文", 87);map.put("数学", 87);map.put("英语", 96);Set<String> myset=map.keySet();for(String key:myset){System.out.println(key);}Set<java.util.Map.Entry<String,Integer>> entry=map.entrySet();for(java.util.Map.Entry<String,Integer> e:entry){System.out.println(e.getKey()+" "+e.getValue());}/** Collection<V> values() * 将Map中所有的Value存入一个集合 */Collection<Integer> com=map.values();for(Integer c:com){System.out.println(c);} }}测试结果:语文英语数学语文 87英语 96数学 87879687
- JAVA的Map的API等知识
- Java:关于使用Map的一些知识
- map-reduce Java API操作及map reduce的配置
- Elasticsearch的Java API/查询/分页等
- Java map详解 - 用法、遍历、排序、常用API等
- Java map详解 - 用法、遍历、排序、常用API等
- Java map 详解 - 用法、遍历、排序、常用API等
- Java map 详解 - 用法、遍历、排序、常用API等
- google的map的api
- Java中对Map(HashMap,TreeMap,Hashtable等)的排序
- Java中对Map(HashMap,TreeMap,Hashtable等)的排序
- java 中的 set以及集合,map,list等的理解
- Java通过google map api实现地址解析的方法
- Google Map Api 的应用
- Google Map API的使用
- shell API 的相关知识
- windows api的一些知识
- java常用的加密,解密,数字签名等API
- recycleview异常报错
- IO复用之select poll epoll的总结
- Android Calender显示日期与时间
- vs2015刚打开时弹出遇到异常的解决办法
- OpenCV视频转换为图片代码
- JAVA的Map的API等知识
- APP开发过程中Dp和Px之间的转换
- 实习感悟
- 机器学习常见算法个人总结(面试用)
- 不用临时变量,交换整数a,b的值
- Unity5.x 项目升级过程中常见问题解决方案总结
- C#二十七 Dataset和DataAdapter
- HDU2444 二分图判断(BFS 的染色法) + 求最大匹配边数(DFS 的匈牙利算法)
- Reality is broken <游戏改变世界> 笔记