在javaWEB阶段做网页分页的时候用的比较多
public interface Map
k:表示的键
v:表示的值
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
Map接口 是一个泛型接口 是以键值对的形式存储数据,K表示键 V表示值,K不可以重复
键值对
顾名思义就是一个K对应一个值
举例:电话簿,身份证
电话簿的存储方式:
(颜子凡有很多女朋友有小丽,小美,小红,小绿等)
他需要将以上的女朋友进行存储(V只可以重复)
如果K重复了 相当他就会分不清数谁是谁(K值永远不会重复)
| 名称(K) | 电话(V) |
|---|---|
| 小丽 | 1008616 |
| 小美 | 1000010 |
| 小红 | 119119 |
| 小绿 | 11086 |
身份证存储方式
| 名称(k) | 身份证(V) |
|---|---|
| admin | 61021457895412 |
| gqk | 61021457819212 |
| jack | 61021453124112 |
可以key值来去查询出value值
public class HashMapextends AbstractMap implements Map , Cloneable, Serializable
基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
构造方法| 方法名称 | 方法描述 |
|---|---|
| public HashMap() | 构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap |
创建一个HashMap的对象
package com.scy.demo;
import java.util.HashMap;
import java.util.Map;
public class MapDemo1 {
public static void main(String[] args) {
Map map = new HashMap();
System.out.println(map);
}
}
Map集合的常用方法
| 方法名称 | 方法描述 |
|---|---|
| V put(K key, V value) | 向Map集合中存放元素(K 不重复) |
| public V get(Object key) | 根据key值(指定键)获取对应的vlue值 |
| public boolean isEmpty() | 判断集合是否为空 |
| public Set keySet() | 返回key值的Set试图 |
| public Set | 返回此映射关系的Set试图 |
| public int size() | 返回集合中存储元素的个数 |
| public V remove(Object key) | 根据key移除对应的value值 |
| public boolean containsKey(Object key) | 判断集合中是否包含key值 |
package com.scy.demo;
import java.util.HashMap;
import java.util.Map;
public class MapDemo2 {
public static void main(String[] args) {
Map map = new HashMap();//创建Map对象
//在集合中添加元素
map.put("bookname", "javaOOP");
map.put("author", "gqk");
map.put("price", 150);
System.out.println(map);
System.out.println(map.size());//输出集合中元素的个数
System.out.println(map.isEmpty());//判断集合是否为空
Object obj = map.get("bookname");
System.out.println(obj);
map.remove("price");//根据key移除对应的value
System.out.println(map);
}
}
以上提到 集合中如果没有泛型则表示泛型为Object 所以接收返回值的时候 用的是Object 但是一般开发都会在集合中添加泛型
泛型的概念泛型:标签
举例:超市购物架上很多瓶子,每个瓶子装的是什么,有标签
中药店,每个抽屉外面贴着标签
集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的对象,所以在JDK1.5之前只能把元素类型设计为Object,JDK1.5之后使用泛型来解决。因为这个时候除了元素的类型不确定,其他的部分是确定的,例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做泛型。Collection,List,ArrayList 这个就是类型参数,即泛型
从JDK1.5以后,Java引入了“参数化类型(Parameterized type)”的概念,允许我们在创建集合时再指定集合元素的类型,正如:List,这表明该List只能保存字符串类型的对象。
所谓泛型,就是允许在定义类、接口时指定类型参数(我们称为类型形参),这个类型形参将在使用时(例如,继承或实现这个接口,用这个类型声明变量、创建对象时)确定(即传入实际的类型参数,也称为类型实参)。JDK1.5改写了集合框架中的全部接口和类,为这些接口、类增加了泛型支持,从而可以在声明集合变量、创建集合对象时传入类型实参。
泛型:程序设计的时候或者程序声明的时候 不能确定程序的类型 jdk1.5之前都是用Object解决,之后引入泛型的概念,可以指定泛型(但是不能确定类型)
是在创建对象和声明对象的时候 才去确定泛型的具体类型(比如 Collection E此时在声明的时候并不知道类型就是一个简单的泛型,创建对象的时候可以给泛型指定具体类型)
泛型案例:
E类型没有指定
package com.scy.demo; public class Test{ private E e; public E getE() { return e; } public void setE(E e) { this.e = e; } }
创建对象的时候为泛型指定具体类型
package com.scy.demo;
public class MailTest {
public static void main(String[] args) {
//创建Test对象(此时代码报警告了 原因是此类上面声明的时候添加了泛型)
//Test test = new Test();
Test test = new Test();
test.setE("HelloWorld");
String str = test.getE();
System.out.println(str);
}
}



