Collection 接口是保存单值最大的父接口,那么 Map接口保存的内容是一对值,所有的内容是以:key->value 的形式保存的。
张三 123456
李四 234567
王五 345678
HashMap、Hastable、TreeMap
Map 接口的常用方法如下所示:
No. |
方法 |
类型 |
描述 |
1 |
V put(K key,V value) |
普通 |
增加内容 |
2 |
V get(Object key) |
普通 |
取得设置的内容,根据key取得 |
3 |
boolean containsKey(Object key) |
普通 |
查找指定的key 是否存在 |
4 |
boolean containsValue(Object value) |
普通 |
查找指定的value 是否存在 |
5 |
boolean isEmpty() |
普通 |
判断集合是否为空 |
6 |
Set<K> keySet() |
普通 |
将全部的key变为Set 集合 |
7 |
Collection<V> values() |
普通 |
将全部的value 变为Collection集合 |
8 |
V remove(Object key) |
普通 |
根据key 删除内容 |
9 |
void putAll(Map<? extends K,? extends V>m) |
普通 |
增加一组数据 |
新的子类:HashMap
HashMap 是一个新的操作类,其本身可以直接为Map 接口进行实例化操作
package org.hashmapdemo;
import java.util.HashMap;
import java.util.Map;
public class HashMapDemo01 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("zhangsan", 1);
map.put("zhangsan", 2);
map.put("lisi", 3);
map.put("wangwu", 5);
System.out.println(map);
}
}
package org.hashmapdemo;
import java.util.HashMap;
import java.util.Map;
public class HashMapDemo01 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("zhangsan", 1);
map.put("zhangsan", 2);
map.put("lisi", 3);
map.put("wangwu", 5);
Integer value = map.get("zhangsan1");
System.out.println(value);
}
}
package org.hashmapdemo;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapDemo01 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("zhangsan", 1);
map.put("zhangsan", 2);
map.put("lisi", 3);
map.put("wangwu", 5);
Set<String> setall = map.keySet();
Iterator<String> ite = setall.iterator();
while (ite.hasNext()){
System.out.println(ite.next());
}
}
}
还可以在以上的程序上进行扩展,再将全部的值取出
package org.hashmapdemo;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapDemo01 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("zhangsan", 1);
map.put("zhangsan", 2);
map.put("lisi", 3);
map.put("wangwu", 5);
Set<String> setall = map.keySet();
Iterator<String> ite = setall.iterator();
while (ite.hasNext()){
String str = ite.next();
System.out.println(str + "-->"+map.get(str));
}
}
}
从运行结果可以发现,HashMap 本身也属于无序的一种操作
也可以通过 values()方法,将全部的value 通过一个Collection 接口的形式返回
package org.hashmapdemo;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class HashMapDemo02 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("zhangsan", 1);
map.put("zhangsan", 2);
map.put("lisi", 3);
map.put("wangwu", 5);
Collection<Integer> col = map.values();
Iterator<Integer> ite = col.iterator();
while(ite.hasNext()){
Integer value = ite.next();
System.out.println(value);
}
}
}
所有的操作与Collection 类似,只是多了一个key 而已
旧的子类:Hashtable
Hashtable 实际上与Vector 的产生时代是一样,也属于最早的集合操作类。之后只是扩展了其应用实现了Map 接口而已
package org.hashmapdemo;
import java.util.Hashtable;
import java.util.Map;
public class HashtableDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,Integer> map = new Hashtable<String,Integer>();
map.put("zhangsan", 1);
map.put("zhangsan", 2);
map.put("lisi", 3);
map.put("wangwu", 5);
System.out.println(map);
}
}
HashMap 与Hashtable 的区别
No |
区别点 |
HashMap |
Hashtable |
1 |
推出时间 |
是在JDK1.2之后推出的,属于新的类 |
是在JDK1.0时推出的,属于旧的操作类 |
2 |
操作 |
采用异步的处理操作 |
采用同步的处理操作 |
3 |
性能 |
性能高 |
性能相对较低 |
4 |
安全 |
非线程安全的操作 |
线程安全 |
按key 排序的子类:TreeMap
TreeMap 使用的时候可以进行按照key 的方式进行排序
package org.hashmapdemo;
import java.util.Map;
import java.util.TreeMap;
public class TreeMapDemo01 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,Integer> map = new TreeMap<String,Integer>();
map.put("A、zhangsan", 1);
map.put("A、zhangsan", 2);
map.put("C、lisi", 3);
map.put("B、wangwu", 5);
System.out.println(map);
}
}
如果现在在给定任意的一个类,那么是否可以直接排序呢?类必须实现Comparable 接口
注意事项一:Map 不能直接使用Iterator输出
在集合的标准操作中所有的集合内容最好都使用Iterator 进行输出,但是在Map接口中并没有明确的定义出这样的操作。如果,没有的话,则就必须深入了解Map存储机制。
在Map 中虽然是以一对值的形式出现的,可是真正的保存的还是一个单独的对象,即:程序将key->value 的放在一个对象之中,之后将此对象加入到集合里
Map.Entry,Map实体,从定义格式上可以发现,此接口属于static 声明的接口,而且是一个内部接口。
对于 Map 和Map.Entry 的关系如图所示,如果要想输出则肯定依靠Map.Entry。
所以,下面就可以给出Map接口使用Iteartor 输出的标准操作
1. 通过Map 接口中的: Set<Map.Entry<K,V>> entrySet() 方法取得 Set集合
2. 通过Set 接口为Iterator 进行初始化的操作
3. 通过Iterator 取出每一个 Map.Entry
4. 通过Map.Entry 进行key 与 value 的分离
package org.hashmapdemo;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapDemo03 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("zhangsan", 1);
map.put("zhangsan", 2);
map.put("lisi", 3);
map.put("wangwu", 5);
Set <Map.Entry<String,Integer>> setmap = map.entrySet();
Iterator<Map.Entry<String,Integer>> ite = setmap.iterator();
while (ite.hasNext()){
Map.Entry<String,Integer> myent = ite.next();
System.out.println(myent.getKey()+"-->"+myent.getValue());
}
}
}
在JDK 1.5 之后也可以使用 foreach 输出全部的内容
package org.hashmapdemo;
import java.util.HashMap;
import java.util.Map;
public class foreachmap {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("zhangsan", 1);
map.put("zhangsan", 2);
map.put("lisi", 3);
map.put("wangwu", 5);
for (Map.Entry<String, Integer> my:map.entrySet()){
System.out.println(my.getKey()+"-->"+my.getValue());
}
}
}
注意事项二:使用非系统类作为key
现在建立一个Person 类,并在Map中设置多个对象。使用String 作为 key
package org.hashmapdemo;
public class Person {
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
public String toString(){
return "姓名:"+this.name+" 年龄:"+this.age;
}
}
在Map 中加入多个内容
package org.hashmapdemo;
import java.util.HashMap;
import java.util.Map;
public class HashMapDemo4 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,Person> map = new HashMap<String,Person>();
map.put("zf", new Person("张三",30));
System.out.println(map);
}
}
在Map 中可以使用匿名对象找到一个key 对应的value
package org.hashmapdemo;
import java.util.HashMap;
import java.util.Map;
public class HashMapDemo4 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,Person> map = new HashMap<String,Person>();
map.put("zf", new Person("张三",30));
System.out.println(map.get("zf"));
System.out.println(map.get(new String("zf")));
}
}
如果现在反过来
package org.hashmapdemo;
import java.util.HashMap;
import java.util.Map;
public class HashMapDemo4 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,Person> map = new HashMap<String,Person>();
map.put("zf", new Person("张三",30));
System.out.println(map.get(new Person("张三",30)));
}
}
现在发现无法通过key 找到 value 了。实现equals()和hashCode()来区分是否是同一个对象
public boolean equals(Object obj){
if (this == obj){
return true;
}
if (!(obj instanceof Person)){
return false;
}
Person per = (Person)obj;
if (this.name.equals(per.name) && this.age == per.age){
return true;
}else{
return false;
}
}
public int hashCode(){
return this.name.hashCode() * this.age;
}
其他子类:使用非系统类作为key
默认情况下,一个Map集合中的key 是不能重复的,那么这种做法是Map 的标准做法,但是在集合中提供了一个非正常的操作子类:IdentityHashMap,通过此类加入的内容,如果对象的地址不相等,则认为不是同一个对象,可以重复加入。
package org.hashmapdemo;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class IdentityHashMapDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<Person,String> map = new IdentityHashMap<Person,String>();
map.put(new Person("张三",30),"zf" );
map.put(new Person("张三",30),"zf" );
System.out.println(map);
}
}
只有在两个对象执行 “==” 操作的时候不相等才会认为 不是同一个对象
分享到:
相关推荐
12.javaMap 接口及其实现类.zip12.javaMap 接口及其实现类.zip12.javaMap 接口及其实现类.zip12.javaMap 接口及其实现类.zip12.javaMap 接口及其实现类.zip12.javaMap 接口及其实现类.zip12.javaMap 接口及其实现类....
13.javaMap接口的两个实现类:.zip13.javaMap接口的两个实现类:.zip13.javaMap接口的两个实现类:.zip13.javaMap接口的两个实现类:.zip13.javaMap接口的两个实现类:.zip13.javaMap接口的两个实现类:.zip13.java...
Java Map接口及其实现类原理解析 Java Map接口是Java集合框架中的一种重要接口,它提供了键值对的存储和管理机制。Map接口的实现类有很多,包括HashMap、TreeMap、LinkedHashMap等,每种实现类都有其特点和使用场景...
1. **Java Map接口**:理解`Map`接口的基本概念和常用方法,如`put()`, `get()`, `remove()`等,以及它的实现类,如`HashMap`、`TreeMap`等的区别和使用场景。 2. **Java Web开发**:涉及Servlet、JSP等技术,用于...
### 一、Java Map接口简介 `Map`接口是Java集合框架的一部分,它提供了存储和检索唯一键对象及其对应的值对象的方法。一个`Map`中不能包含重复的键:每个键最多只能映射到一个值。`Map`的主要实现类有`HashMap`、`...
在Java编程中,Map接口是数据结构中非常重要的一个部分,它提供了键值对的存储方式,便于快速访问和操作数据。在许多实际应用中,尤其是高性能和高并发的场景,Map常被用来实现缓存技术,以提高数据读取速度和系统...
Java是一种广泛使用的面向对象的编程语言,其集合框架是学习Java的重要部分,特别是Map接口,它是集合中的关键组件。Map接口在Java中用于存储键值对数据,它提供了丰富的功能来管理和操作这些数据。本篇笔记集合将...
在Java中,"javamap"和"地图_java"可能是指使用Map类来模拟现实世界中的地理地图,例如通过键表示地理位置,值表示该地点的信息。这涉及到自定义类作为键值对中的元素类型,以及如何设计键值对以适应特定需求的问题...
在Java环境中调用MapServer,通常会利用MapScript库来实现,这是一个允许编程语言与MapServer进行交互的接口。本实例主要探讨如何在Java项目中配置和使用MapServer,以及解决配置过程中遇到的问题。 首先,我们需要...
本文将探讨Map接口及其主要实现,并讨论如何根据应用需求选择合适的Map类型。 **Map接口和方法** Map接口定义了四个主要的方法,所有Map实现都必须实现这些方法。其中,`equals(Object o)`和`hashCode()`方法用于...
在Java编程语言中,`Map`接口是集合框架中的一个核心组成部分,它存储键值对映射。本篇文章将详细介绍几种常用的遍历`Map`的方法,包括使用传统迭代器(Iterator)、增强型for循环(For-Each循环)以及通过键集(Key...
Map接口则是Java集合框架的一部分,它提供了键值对的数据存储方式,方便数据的存取。将Pojo对象转换为Map,可以简化数据处理过程,尤其是在JSP页面上展示数据时,Map的灵活性更加突出。本文将详细介绍如何实现Java中...
**二、JAVA Map接口** Map接口存储键值对,不保证元素的顺序,且不允许键重复。Map接口的方法包括put添加键值对、get获取值、remove移除键值对以及size返回键值对数量。常见的Map实现类有HashMap、TreeMap和...
在Java编程中,XML(可扩展标记语言)是一种用于存储和传输数据的标准化格式,而Map是Java集合框架中的一个重要接口,它提供了键值对的数据结构。将XML与Map进行互转是常见的需求,特别是在处理配置文件或者进行数据...
这个项目旨在帮助初学者理解Java的基本语法、控制结构以及类和对象的概念,同时涉及了"java map"这一标签所指代的Java集合框架中的Map接口。 1. **Java编程基础**: - **变量和数据类型**:Java支持基本数据类型如...
在Java编程中,`Map`接口是集合框架的一部分,它提供了键值对的存储功能。在处理`Map`对象时,我们经常需要遍历其中的所有元素。本篇将详细介绍Java中遍历`Map`的不同方法,以及如何获取`Map`的长度。 1. **遍历Map...
### List接口和Map接口详解 #### 一、Java集合框架概览 Java集合框架是Java标准库的一个核心组成部分,用于处理各种数据结构如列表、集合和映射等。该框架提供了一组统一的接口和实现,使开发人员能够高效地管理和...
在Java编程语言中,Map接口是集合框架的重要组成部分,它提供了键值对(key-value pairs)的存储方式。Map不是列表或数组,而是允许我们通过一个键(key)来查找对应的值(value)。本篇文章将深入讲解Map的使用实例...
本主题聚焦于易语言中的面向对象编程,特别是模仿Java集合框架的List和Map接口的实现。这些数据结构在编程中扮演着核心角色,用于组织和管理数据。 首先,让我们深入了解易语言的面向对象编程概念。面向对象编程...
Java Map接口是Java集合框架的重要组成部分,它提供了一种存储键值对的数据结构。Map接口不保证元素的顺序,但提供了各种实现类来满足不同需求。以下是对Map接口及其常见子类的详细解释: 1. **Map接口概述** Map...