博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Map容器
阅读量:6875 次
发布时间:2019-06-26

本文共 3497 字,大约阅读时间需要 11 分钟。

映射(Map) 是一个存储键/值对的对象

键是唯一的,值可以重复

方法

  size()

  isEmpty()

  containsKey()      判断容器里是否包含指定的键

  containsValue()  判断容器里是否包含指定的值

  get()   根据键来获取对应的值

  put()   把键值对数据添加到数组中

  remove()    删除对应的key

  values()  获取所有的值

  keySet( )   获取map中所有的键

  entrySet()   返回包含的映射关系的Set视图

HashMap类是基于哈希表的map接口的实现,并允许使用null键和null值

实现Map并扩展AbstractMap,本身并没有增加任何新的方法

Hashtable   线程安全的  单线程使用会低

package com.day1;import java.util.Collection;import java.util.HashMap;import java.util.Map;import java.util.Map.Entry;import java.util.Set;public class HashMapDemo {  public static void main(String[] args) {     Map
hMap=new HashMap
(); hMap.put("A", "张三"); hMap.put("B", "李四"); hMap.put("C", "王五"); hMap.put("D", "周六"); System.out.println(hMap); // 获取map中所有的键 Set
hsSet=hMap.keySet( ); System.out.println(hsSet); for (String string : hsSet) { System.out.println(string); } // 获取map中所有的值 Collection
strings=hMap.values(); System.out.println(strings); for (String string : strings) { System.out.println(string); } //得到key,并得到key所对应的值 Set
k=hMap.keySet( ); for (String string : k) { System.out.println(string+hMap.get(string)); } //当我们调用put(key,value)方法的时候,首先会把key和value封装到Entry这个静态内部类对象中 //把Entry对象添加到数组中,所以我们想获取map中的所有键值对 ,我们只要获取数组中所有的Entry对象.接下来调用 //Entry对象中的getkey和getvalue方法,获取键值对 Set
> eSet= hMap.entrySet(); for (Entry
entry : eSet) { System.out.println(entry.getValue()); }}}

/*

* hashmap调用默认构造方法会产生一个底层是16的Entry的数组
* int hash=hash(key.hashcode())
* 首先调用key的hashcode方法来得到一个整数--哈希码
* 把哈希码作为参数传到hash函数中来进行运算--散列运算-得到了一个整型--散列值
* int i=indexFor(hash,table.length);
* 把散列值和数组的长度来进行运算 ,最终得到Entry对象存放到数组的位置,下标
*
* hashmap内部结构是数组链表结构
* 因为不同的key有可能算出来是相同的散列值,根据散列值计算出存放到数组的下标会冲突
*
*/

 

哈希码的产生和使用

当调用对象的hashcode()方法时就会返回当前对象的哈希码值,支持此方法时为了提高哈希表的性能

package com.day1;import java.util.HashMap;import java.util.Map;public class HashMapDemo2 {  public static void main(String[] args) {     Map
map=new HashMap
(); map.put(new person("A", 20),"张三"); map.put(new person("B", 30),"李四"); map.put(new person("C", 60),"王五"); map.put(new person("B", 30),"玫瑰"); System.out.println(map.size()); }}class person{ private String name; private int age; public person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; person other = (person) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } }

转载于:https://www.cnblogs.com/tanlei-sxs/p/9980279.html

你可能感兴趣的文章
python redis 操作 Sorted Set 出现 'str' object has no attribute 'items'
查看>>
Javascript 面向对象编程
查看>>
Java基础学习总结(14)——Java对象的序列化和反序列化
查看>>
图片翻转
查看>>
了解 Open vSwitch 环境中的各种网络设备
查看>>
Maven学习总结(三)——使用Maven构建项目
查看>>
Go语言开发(三)、Go语言内置容器
查看>>
web.xml配置详解
查看>>
Java8 十大新特性详解
查看>>
DNS服务器搭建
查看>>
/var/log下的日志
查看>>
Java基础学习总结(1)——equals方法
查看>>
MySQL 5.7 忘记密码后修改密码
查看>>
webbench压力测试工具
查看>>
工作中的zookeeper
查看>>
如何把shellcode转换成exe文件分析
查看>>
cut命令
查看>>
导航网站的思考
查看>>
Disruptor笔记(四)-关键类和代码
查看>>
我的友情链接
查看>>