Map集合的功能概述

  • 添加功能

* V put(K key,V value):添加元素。
            * 如果键是第一次存储,就直接存储元素,返回null
            * 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值

  • 删除功能

* void clear():移除所有的键值对元素
        * V remove(Object key):根据键删除键值对元素,并把值返回

  • 判断功能

* boolean containsKey(Object key):判断集合是否包含指定的键
        * boolean containsValue(Object value):判断集合是否包含指定的值
        * boolean isEmpty():判断集合是否为空

  • 获取功能

* Set<Map.Entry<K,V>> entrySet():
        * V get(Object key):根据键获取值
        * Set<K> keySet():获取集合中所有键的集合
        * Collection<V> values():获取集合中所有值的集合

  • 长度功能

* int size():返回集合中的键值对的个数

import java.util.Collection;
import java.util.HashMap;
import java.util.Map; public class Demo1_Map { public static void main(String[] args) {
/* Map接口:
* 将键映射到值的对象
* 一个映射不能包含重复的键
* 每个键最多只能映射到一个值
Map接口和Collection接口的不同
* Map是双列的,Collection是单列的
* Map的键唯一,Collection的子体系Set是唯一的
* Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构 是针对元素有效*/
Map<String, Integer> map = new HashMap<>();
Integer i1 = map.put("张三", 23);
Integer i2 = map.put("李四", 24);
Integer i3 = map.put("赵武", 21);
Integer i4 = map.put("张三", 24); /* System.out.println(map);//{赵武=21, 李四=24, 张三=24} System.out.println(i1);//null
System.out.println(i2);//null
System.out.println(i3);//null
// System.out.println(i4);//23 //相同的键不存储,值覆盖,返回被覆盖的值 Integer value = map.remove("张三"); //根据键删除元素,返回键对应的值
System.err.println(value);//24
System.out.println(map);//{赵武=21, 李四=24} System.out.println(map.containsKey("李四"));//true
System.out.println(map.containsValue(21));//true
*/
Collection<Integer> collection = map.values();//获取所有的值
System.out.println(collection);//[21, 24, 24]
System.out.println(map.size());//3 //返回集合中键值得个数 } }

Map遍历:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import javax.swing.text.html.parser.Entity; public class Demo2_Iterator { public static void main(String[] args) {
//遍历Map
Map<String, Integer> map = new HashMap<>();
Integer i1 = map.put("张三", 23);
Integer i2 = map.put("李四", 24);
Integer i3 = map.put("赵武", 21);
Integer i4 = map.put("张三", 24); /* Set<String> keySet = map.keySet(); //获取所有的键集合
Iterator<String> iterator = keySet.iterator();
while(iterator.hasNext()) {
String key = iterator.next();
Integer value = map.get(key);
System.out.println(key+"="+value);
}*/ //使用增强for
/* for(String key:map.keySet()) {
System.out.println(key+"="+map.get(key));
}*/ // //使用Map.Entry
// //Entry是Map的内部接口
// //将键和值封装成Entry对象,并存储在Set集合中
// Set<Map.Entry<String, Integer>> entries = map.entrySet();
// Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
// while (iterator.hasNext()) {
// Map.Entry<String,Integer> entry = iterator.next();//父类引用指向子 类对象
// String key = entry.getKey();
// Integer value = entry.getValue();
// System.out.println(key+"="+value);
// } //改for
//Entry是Map.Entry的子类对象
for(Entry<String, Integer> entry:map.entrySet()) {
System.out.println(entry.getKey()+"="+entry.getValue());
}
} }
HashMap存储:
import java.util.HashMap;

import com.fly.bean.Student;

public class Demo3_HashMap {

    public static void main(String[] args) {
// HashMap存储
//Student需要重写hashCode(),equals()方法
HashMap<Student, String> hMap = new HashMap<>();
hMap.put(new Student("张三",19),"aa");
hMap.put(new Student("李四",19),"cc");
hMap.put(new Student("王五",19),"dd");
hMap.put(new Student("张三",19),"bb"); System.out.println(hMap);
} }

LinkedHashMap:

import java.util.LinkedHashMap;

public class Demo4_LinkedHashMap {

    public static void main(String[] args) {
LinkedHashMap<String, Integer> lHashMap = new LinkedHashMap<>();
lHashMap.put("b", 11);
lHashMap.put("a", 22);
lHashMap.put("d", 44);
lHashMap.put("c", 33); System.out.println(lHashMap);//{b=11, a=22, d=44, c=33}
} }

TreeMap:

import java.util.TreeMap;

import com.fly.bean.Student;

public class Demo5_TreeMap {
public static void main(String[] args) {
TreeMap<Student, String> tMap = new TreeMap<>();
tMap.put(new Student("张三",13), "aa");
tMap.put(new Student("张三",13), "bb");
tMap.put(new Student("李四",12), "cc");
tMap.put(new Student("王五",15), "dd"); System.out.println(tMap);//{Student [name=李四, age=12]=cc, Student [name= 张三, age=13]=bb, Student [name=王五, age=15]=dd} //Student需实现Comparable接口,重写的部分
/* public class Student implements Comparable<Student> {
@Override
public int compareTo(Student o) {
int num = this.age - o.age;
return num==0 ? this.name.compareTo(o.name) : num;
}
}
*/ }
}

练习:统计字符串中每个字符出现的次数

import java.util.HashMap;

public class Test1 {

    public static void main(String[] args) {
// 统计字符串中每个字符出现的次数
String s = "aaabbbbccccc";
char[] arr = s.toCharArray();//将字符串转换为字符数组
// 定义双列集合,存储字符串中字符以及字符出现的次数
HashMap<Character, Integer> hMap = new HashMap<>();
for (char c : arr) {
//有就加1,没有置为1
hMap.put(c, hMap.containsKey(c) ? hMap.get(c)+1 : 1);
}
for (Character key : hMap.keySet()) {
System.out.println(key+"="+hMap.get(key));
} } }

集合嵌套之HashMap嵌套HashMap:

import java.util.HashMap;

import com.fly.bean.Student;

public class Demo6_HashMap2 {

    public static void main(String[] args) {
// 集合嵌套之HashMap嵌套HashMap
HashMap<Student, String> hMap1 = new HashMap<>();
hMap1.put(new Student("a",12),"bj");
hMap1.put(new Student("b",13),"sh");
hMap1.put(new Student("c",15),"gd");
hMap1.put(new Student("d",12),"sz"); HashMap<Student, String> hMap2 = new HashMap<>();
hMap2.put(new Student("e",12),"bj");
hMap2.put(new Student("f",13),"sh");
hMap2.put(new Student("g",15),"gd");
hMap2.put(new Student("h",12),"sz"); HashMap<HashMap<Student, String>, String> hashMap = new HashMap<>();
hashMap.put(hMap1, "1101");
hashMap.put(hMap2, "1102"); for (HashMap<Student, String> sk : hashMap.keySet()) {
System.out.println(hashMap.get(sk));
for (Student key : sk.keySet()) {
System.out.println(key+"="+sk.get(key));
}
}
} }

HashMap和Hashtable的区别:
(面试常考)

import java.util.HashMap;
import java.util.Hashtable; public class Demo7_Hashtable { public static void main(String[] args) {
/* HashMap和Hashtable的区别
Hashtable是JDK1.0版本出现的,是线程安全的,效率低,HashMap是JDK1.2版本 出现的,是线程不安全的,效率高
Hashtable不可以存储null键和null值,HashMap可以存储null键和null值*/
HashMap<String, Integer> hashMap = new HashMap<>();
hashMap.put(null, null);
System.out.println(hashMap);//{null=null} Hashtable<String, Integer> hashtable = new Hashtable<>();
// hashtable.put(null, 1);
// hashtable.put("a", null);
// System.out.println(hashtable);//NullPointerException } }

Collections类概述:
针对集合操作 的工具类

  • Collections成员方法

public static <T> void sort(List<T> list) 排序
        public static <T> int binarySearch(List<?> list,T key) 二分查找 找不到返回-

的插入点-1
        public static <T> T max(Collection<?> coll) 根据默认排序结果获取集合中的最

大值
        public static void reverse(List<?> list) 反转
        public static void shuffle(List<?> list) 随机置换

泛型固定下边界与泛型固定上边界:

  • ? super E  ,  E是子类 ?是父类   把子类对象拿出来放到父类的比较器中
  • ? extends E , 泛型固定上边界 ?是任意子类,E是父类固定的 父类集合存放子类对象

10 HashMap,Map.Entry,LinkedHashMap,TreeMap,Hashtable,Collections类的更多相关文章

  1. hashMap 底层原理+LinkedHashMap 底层原理+常见面试题

    1.源码 java1.7    hashMap 底层实现是数组+链表 java1.8 对上面进行优化  数组+链表+红黑树 2.hashmap  是怎么保存数据的. 在hashmap 中有这样一个结构 ...

  2. Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌

    1.Map集合概述和特点 * A:Map接口概述  * 查看API可以知道:          * 将键映射到值的对象          * 一个映射不能包含重复的键          * 每个键最多 ...

  3. 接口java.util.Map的四个实现类HashMap Hashtable LinkedHashMap TreeMap

    java中HashMap,LinkedHashMap,TreeMap,HashTable的区别 :java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMa ...

  4. Map,Hashmap,LinkedHashMap,Hashtable,TreeMap

    java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap. Map主要用于存储健值对, ...

  5. map,set,list等集合解析以及HashMap,LinkedHashMap,TreeMap等该选谁的的区别

    前言: 今天在整理一些资料时,想起了map,set,list等集合,于是就做些笔记,提供给大家学习参考以及自己日后回顾. Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允 ...

  6. HashMap Hashtable LinkedHashMap TreeMap

    // Map<String, String> map = new HashMap<String, String>(); // bb aa cc Map<String, S ...

  7. Java从入门到放弃18---Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法

    Java从入门到放弃18—Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法01 Map集合Map集合处理键值映射关系的数据为了方便 ...

  8. java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对,根 ...

  9. HashMap 、LinkedHashMap、HashTable、TreeMap 和 Properties 的区别

    HashMap 1.线程不安全: 2.允许null value 和 null key: 3.访问效率比较高: 4.Java1.2引进的Map接口的一个实现: 5.轻量级: 6.根据键的HashCode ...

随机推荐

  1. 初时Windows程序

    window 操作系统中,处处是窗体 优点:简单 强大 方便 灵活 步骤: 新建项目 项目类型 visual C#项目 模板 window应用程序 用partial 将同一个窗体的代码分开放在两个文件 ...

  2. python全栈开发笔记---------基本数据类型

    基本数据类似包括: 字符串(str) 数字(int) 列表(list) 元祖(tuple) 字典(dict) 布尔值(bool) 字符串(引号): name = "我是某某某" n ...

  3. Oracle 12c的自增列Identity Columns

    在Oracle的12c版本中,Oracle实现了类似MySQL中的auto_increment的自增列,下面我们看一起Oracle是怎么实现的. Oracle Database 12c Enterpr ...

  4. SpringBoot 上传、下载(四)

    工程目录结构 完整代码: 1.pom.xml 首先当然是添加依赖,用到thymeleaf模板渲染html页面 <project xmlns="http://maven.apache.o ...

  5. String和StringBuffer互相转换

    String:不可变 StringBuffer:可变 StringBuffer 上的任何修改性的操作都是在同一个字符数组上进行的,所以修改其中任一个值 另一个的值也会随着改变! StringBuffe ...

  6. format格式

    The format part is where you can specify more precisely the format of the data that you expect. For ...

  7. SharePoint online Multilingual support - Settings

    博客地址:http://blog.csdn.net/FoxDave This post will talk about how to enable sharepoint online site mul ...

  8. oracle 实例名,数据库名概念

    拷贝于https://www.cnblogs.com/ahudyan-forever/p/6016784.html 在实际的开发应用中,关于Oracle数据库,经常听见有人说建立一个数据库,建立一个I ...

  9. <Using ZooKeeper><Deploy & Use>

    安装与部署 配置过程相当简单.集群模式部署: wget http://www-us.apache.org/dist/zookeeper/stable/zookeeper-3.4.10.tar.gz t ...

  10. dos命令:网络相关命令

    网络相关命令 一.Arp命令 1.介绍 ​ 显示和修改地址解析协议(ARP)使用的“IP 到物理”地址转换表. 2.语法 ARP -s inet_addr eth_addr [if_addr] ARP ...