Java基础快速入门: Map 集合详解

【Java】Map集合概述 目录 一、前言 二、Map介绍 三、Map的基本功能 Map功能演示: 四、Map集合的获取功能 Map遍历演示: 一、前言 map集合是我们常使用的集合,了解和使用map集合是必要的 二、Map介绍 基本形式: public interface Map<K,V> Map是一个接口,我们不能直接创建对象,可以通过多态的形式创建对象,Map中有两个 参数,一个是K表示键,一个是V表示值,且一个键有且对应一个值,Map中不能包含重复的 键,若是有重复的键... 阅读详情

本文纲要

  1. Map 集合概述与基本使用
  2. Map 集合常用方法
  3. Map 第一种遍历方式:通过 keySet 遍历
  4. Map 第二种遍历方式:通过 entrySet 遍历
  5. HashMap 原理解析
  6. HashMap 练习:自定义对象作键
  7. TreeMap 原理解析
  8. TreeMap 练习:排序与字符统计

Map 集合概述与基本使用

项目结构

mymap 
└── src 
    └── com 
        └── wb 
            ├── mapdemo1 
            │   ├── Student.java 
            │   ├── MyMap1.java 
            │   ├── MyMap2.java 
            │   ├── MyMap3.java 
            │   ├── MyMap4.java 
            │   ├── MyMap5.java 
            └── maptest 
                ├── Student.java 
                ├── Test1.java 
                └── Test2.java 

1 ) 单列集合(如 List、Set)每次添加一个元素,而 双列集合 Map 每次添加一对数据(键值对)

  • 键(Key):唯一,不可重复
  • 值(Value):可以重复
  • 键与值是一一对应的关系,一个键只能找到自己对应的值
  • 键 + 值 整体称为 键值对对象(Entry 对象)

Map 是接口,不能直接实例化,需要使用实现类,如 HashMap
泛型中需要指定两个类型:Map<K,V>

2 ) 基本使用示例(对应 MyMap1.java):

package com.wb.mapdemo1;
 
import java.util.HashMap;
import java.util.Map;
 
/*
Map的基本使用 
 */
public class MyMap1 {
    public static void main(String[] args) {
        // 使用多态创建Map对象 
        Map<String, String> map = new HashMap<>();
 
        // put方法添加元素,键是学号,值是姓名 
        map.put("itheima001", "小智");
        map.put("itheima002", "小美");
        map.put("itheima003", "大胖");
 
        System.out.println(map);
    }
}

输出结果:{itheima001=小智, itheima002=小美, itheima003=大胖}

Map 集合常用方法

Map 接口中定义的常用方法,所有实现类都可以使用。

示例类 MyMap2.java 分方法演示了 put、remove、clear、containsKey、containsValue、isEmpty、size。

package com.wb.mapdemo1;
 
import java.util.HashMap;
import java.util.Map;
 
public class MyMap2 {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("itheima001", "小智");
        map.put("itheima002", "小美");
        map.put("itheima003", "大胖");
        map.put("itheima004", "小黑");
        map.put("itheima005", "大师");
 
        // 逐方法测试,可打开注释 
        // method1(map);
        // method2(map);
        // method3(map);
        // method4(map);
        // method5(map);
        // method6(map);
        // method7(map);
    }
 
    // 1. put:添加元素,若键已存在则覆盖原值并返回旧值 
    private static void method1(Map<String, String> map) {
        String s = map.put("itheima001", "aaa");
        System.out.println(s);      // 输出 "小智"(被覆盖的旧值)
        System.out.println(map);    // itheima001 的值变为 "aaa"
    }
 
    // 2. remove:根据键删除键值对,返回被删除的值 
    private static void method2(Map<String, String> map) {
        String s = map.remove("itheima001");
        System.out.println(s);      // 输出 "小智"
        System.out.println(map);    // itheima001 已不存在 
    }
 
    // 3. clear:清空所有键值对 
    private static void method3(Map<String, String> map) {
        map.clear();
        System.out.println(map);    // {}
    }
 
    // 4. containsKey:判断是否包含指定键 
    private static void method4(Map<String, String> map) {
        boolean result1 = map.containsKey("itheima001");
        boolean result2 = map.containsKey("itheima006");
        System.out.println(result1); // true 
        System.out.println(result2); // false 
    }
 
    // 5. containsValue:判断是否包含指定值(较少使用)
    private static void method5(Map<String, String> map) {
        boolean result1 = map.containsValue("aaa");
        boolean result2 = map.containsValue("小智");
        System.out.println(result1); // false 
        System.out.println(result2); // true 
    }
 
    // 6. isEmpty:判断集合是否为空 
    private static void method6(Map<String, String> map) {
        boolean empty1 = map.isEmpty();
        System.out.println(empty1); // false 
        map.clear();
        boolean empty2 = map.isEmpty();
        System.out.println(empty2); // true 
    }
 
    // 7. size:获取键值对个数 
    private static void method7(Map<String, String> map) {
        int size = map.size();
        System.out.println(size);   // 5 
    }
}

Map 第一种遍历方式:通过 keySet 遍历

思路:先获取所有的键(Set<K>),再通过键获取值。

核心方法:

  • Set<K> keySet():返回所有键的 Set 集合
  • V get(Object key):根据键获取对应的值
package com.wb.mapdemo1;
 
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
 
public class MyMap3 {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("1号丈夫", "1号妻子");
        map.put("2号丈夫", "2号妻子");
        map.put("3号丈夫", "3号妻子");
        map.put("4号丈夫", "4号妻子");
        map.put("5号丈夫", "5号妻子");
 
        // 获取所有键 
        Set<String> keys = map.keySet();
        // 遍历键,通过 get 获取值 
        for (String key : keys) {
            String value = map.get(key);
            System.out.println(key + "---" + value);
        }
    }
}

Map 第二种遍历方式:通过 entrySet 遍历

思路:把键值对看作整体(Entry 对象),先获取所有 Entry 对象,再从中取出键和值。

核心方法:

  • Set<Map.Entry<K,V>> entrySet():获取所有键值对对象的 Set 集合
  • K getKey():从 Entry 中获取键
  • V getValue():从 Entry 中获取值
package com.wb.mapdemo1;
 
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
 
public class MyMap4 {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("1号丈夫", "1号妻子");
        map.put("2号丈夫", "2号妻子");
        map.put("3号丈夫", "3号妻子");
        map.put("4号丈夫", "4号妻子");
        map.put("5号丈夫", "5号妻子");
 
        // Set 中装的是 Map.Entry 对象,Entry 中又包含键和值 
        Set<Map.Entry<String, String>> entries = map.entrySet();
        for (Map.Entry<String, String> entry : entries) {
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key + "---" + value);
        }
    }
}

延伸:Map 接口还提供了 forEach 方法,底层原理与 entrySet 遍历一致,接收 Lambda 表达式,可极大简化遍历代码(见后文示例)。

HashMap 原理解析

HashMap 底层采用 哈希表 结构(数组 + 链表 + 红黑树)。

  • 默认数组长度 16,加载因子 0.75,扩容时机:16 × 0.75 = 12(元素个数超过 12 扩容为 2 倍)
  • JDK8 起,链表长度 ≥8 且数组长度 ≥64 时,链表转为红黑树,提升查询效率

添加元素流程:

渲染错误: Mermaid 渲染失败: Parse error on line 2: ...art TD A[调用 put(K,V)] --> B[计算键的 ha ----------------------^ Expecting 'SQE', 'DOUBLECIRCLEEND', 'PE', '-)', 'STADIUMEND', 'SUBROUTINEEND', 'PIPE', 'CYLINDEREND', 'DIAMOND_STOP', 'TAGEND', 'TRAPEND', 'INVTRAPEND', 'UNICODE_TEXT', 'TEXT', 'TAGSTART', got 'PS'

关键点:

  • 依赖 hashCode() 和 equals() 保证键的唯一性(值不参与比较)
  • 若键存储自定义对象,必须重写 hashCode() 和 equals() 方法
  • 若键为常见类(如 String、Integer),Java 已重写好,无需处理

HashMap 练习:自定义对象作键

需求:键为学生对象(Student),值为籍贯,存储并遍历

Student 类作为键,必须重写 hashCode() 和 equals()

package com.wb.mapdemo1;
 
import java.util.Objects;
 
public class Student {
    private String name;
    private int age;
 
    // 构造方法 
    public Student() {}
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
    // getter/setter 略 
 
    @Override 
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }
 
    @Override 
    public int hashCode() {
        return Objects.hash(name, age);
    }
 
    @Override 
    public String toString() {
        return "Student{name='" + name + "', age=" + age + "}";
    }
}

遍历示例(MyMap5.java)演示了三种遍历方式(前两种 + forEach):

package com.wb.mapdemo1;
 
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
 
public class MyMap5 {
    public static void main(String[] args) {
        HashMap<Student, String> hm = new HashMap<>();
 
        Student s1 = new Student("xiaohei", 23);
        Student s2 = new Student("dapang", 22);
        Student s3 = new Student("xiaomei", 22);
 
        hm.put(s1, "江苏");
        hm.put(s2, "北京");
        hm.put(s3, "天津");
 
        // 第一种:keySet 
        Set<Student> keys = hm.keySet();
        for (Student key : keys) {
            String value = hm.get(key);
            System.out.println(key + "----" + value);
        }
 
        System.out.println("===================================");
 
        // 第二种:entrySet 
        Set<Map.Entry<Student, String>> entries = hm.entrySet();
        for (Map.Entry<Student, String> entry : entries) {
            Student key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key + "----" + value);
        }
 
        System.out.println("===================================");
 
        // 第三种:forEach + Lambda 
        hm.forEach((key, value) -> System.out.println(key + "----" + value));
    }
}

TreeMap 原理解析

TreeMap 底层是红黑树,元素按照键的自然顺序或自定义比较器排序

添加流程(红黑树自动调整):

  1. 创建 Entry 节点,颜色默认红色
  2. 第一个节点作为根,并改为黑色
  3. 后续节点按排序规则插入,若违反红黑规则(如两个红色节点相连),通过变色、旋转(左旋/右旋)恢复平衡
  4. 排序时只比较键,与值无关

红黑树添加时的调整示意(仅示例类似情况):

是

否

是

否

红色

黑色/ null

新节点默认红色

是否为根节点?

染黑,完成

父节点是否为黑色?

无需调整

叔叔节点颜色?

父叔变黑,祖父变红,向上递归

根据结构旋转并变色

左旋或右旋

使用前提:

  • 键如果是自定义对象,必须实现 Comparable 接口,或在构造 TreeMap 时传入 Comparator 比较器
  • 自然排序或比较器排序只对键生效

简单示例:使用默认自然排序(String 实现了 Comparable)

TreeMap<String, Integer> tm = new TreeMap<>();
tm.put("c", 3);
tm.put("a", 1);
tm.put("b", 2);
System.out.println(tm);  // {a=1, b=2, c=3}  按键排序 

TreeMap 练习:排序与字符统计

1 ) 自定义对象作为键并排序

需求:键为 Student,值为籍贯,按年龄排序,年龄相同按姓名排序。

方式一:自然排序(Comparable)
Student 实现 Comparable 接口,重写 compareTo
以下代码已注释,可取消注释使用

package com.wb.maptest;
 
public class Student implements Comparable<Student> {
    private String name;
    private int age;
 
    // 构造方法、getter/setter、toString 略 
 
    @Override 
    public int compareTo(Student o) {
        // 主要条件:年龄(降序)
        int result = o.getAge() - this.getAge();
        // 次要条件:姓名 
        result = (result == 0) ? o.getName().compareTo(this.getName()) : result;
        return result;
    }
}

方式二:比较器排序(Comparator)

创建 TreeMap 时传入匿名内部类

package com.wb.maptest;
 
import java.util.Comparator;
import java.util.TreeMap;
 
public class Test1 {
    public static void main(String[] args) {
        // 通过匿名内部类传入比较器 
        TreeMap<Student, String> tm = new TreeMap<>(new Comparator<Student>() {
            @Override 
            public int compare(Student o1, Student o2) {
                int result = o1.getAge() - o2.getAge();   // 升序 
                result = (result == 0) ? o1.getName().compareTo(o2.getName()) : result;
                return result;
            }
        });
 
        Student s1 = new Student("xiaohei", 23);
        Student s2 = new Student("dapang", 22);
        Student s3 = new Student("xiaomei", 22);
 
        tm.put(s1, "江苏");
        tm.put(s2, "北京");
        tm.put(s3, "天津");
 
        tm.forEach((key, value) -> System.out.println(key + "---" + value));
    }
}

2 ) 字符统计案例

需求:统计字符串 “aababcabcdabcde” 中每个字符出现次数,并按格式输出。

package com.wb.maptest;
 
import java.util.TreeMap;
 
public class Test2 {
    public static void main(String[] args) {
        String s = "aababcabcdabcde";
        TreeMap<Character, Integer> tm = new TreeMap<>();
 
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (!tm.containsKey(c)) {
                // 第一次出现 
                tm.put(c, 1);
            } else {
                // 已出现过,次数+1 
                Integer count = tm.get(c);
                count++;
                tm.put(c, count);
            }
        }
 
        // 输出 a(5)b(4)c(3)d(2)e(1)
        tm.forEach((key, value) -> System.out.print(key + "(" + value + ")"));
    }
}

输出效果:a(5)b(4)c(3)d(2)e(1)
利用 TreeMap 对键自然排序的特性,使字符按字典序排列

总结

  • Map 是双列集合,键唯一,值可重复
  • 常用方法:put、remove、get、containsKey、keySet、entrySet 等
  • 遍历:推荐 entrySet 或 forEach + Lambda
  • HashMap:哈希表结构,需重写 hashCode 与 equals 保证自定义对象键的唯一性
  • TreeMap:红黑树结构,需提供排序规则(Comparable 或 Comparator)
  • 根据应用场景选择合适的实现类:无须排序用 HashMap,需要按键排序用 TreeMap
java集合框架(二)——Map集合 Map集合称为双列集合,格式:{key1=value1,key2=value2,key3=value3,… 阅读详情

相关推荐

Java基础:Map集合

Collection中的集合,元素是孤立存在的,向集合中存储元素采用一个个元素的方式存储。Map中的集合,元素是成对存在的。每个元素由键与值两部分组成,通过键可以找对所对应的值。Collection中的集合称为单列集合,Map中的集合称为双列集合。需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。

时代各有不同,青春一脉相承。 1947

【Java 基础篇】Java Map 详解

Map接口是一个键值对的集合,它继承自Collection接口中的size()和isEmpty()等方法,同时还提供了根据键查找值的方法,以及添加、删除和更新键值对的方法。在Java中,Map接口有几个常见的实现类,每个实现类都具有不同的性能和用途。HashMap:基于哈希表实现,具有快速的查找和插入操作,适用于需要快速查找键值对的场景。TreeMap:基于红黑树实现,可以对键进行排序,并提供了一系列与排序相关的方法,适用于需要对键进行排序的场景。

繁依Fanyi的博客 4万+

【Java 集合】Map 集合底层原理

Map 集合底层原理

2303_76696898的博客 1636

Java中的Map及其使用

Map Map集合概述和特点 概述: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 Map接口和Collection接口的不同 Map是双列的,Collection是单列的 Map的键唯一,Collection的子体系Set是唯一的 Map集合的数据结构针对键有效,跟值无关;Collection集合的数据结构是针对元素有效 Map集合的功能概述 a:添加功能 V put...

taraex的博客 17万+

Comsol有限元网格剖分实战:从基础操作到高效仿真技巧

本文系统介绍了COMSOL有限元网格剖分的核心实战技巧。从基础的物理场控制与用户控制网格选择,到三角形、四边形、四面体等网格单元类型的适用场景,再到扫掠网格、边界层网格与复制网格等高效剖分方法,最后讲解了网格质量评估与几何预处理的关键步骤。旨在帮助用户掌握从自动到手动、从基础到高效的网格剖分艺术,实现仿真精度与计算效率的最佳平衡。

j7k8l的博客 376

pytorch中dataloader的num_workers参数

结论速递 在Windows系统中,num_workers参数建议设为0,在Linux系统则不需担心。 1 问题描述 在之前的任务超大图上的节点表征学习中,使用PyG库用于数据加载的DataLoader,ClusterLoader等类时,会涉及到参数num_workers。在不同系统环境试验该参数的设定值时,会出现不同的结果 colab(Linux),设为12 有warning message,提示num_workers参数设置不合理,不影响继续运行 /usr/local/lib/python3.7/di

qq_40990057的博客 1万+

Java map 详解 - 用法、遍历、排序、常用API等

Java map 详解 - 用法、遍历、排序、常用API等

weixin_45817985的博客 5377

合成生物学中试:花钱只是开始,烧钱才是常态

2026年合成生物学行业面临严峻产业化挑战:多家企业终止发酵项目或延期投产,显示从实验室到工厂的转化困境。核心问题并非基因合成成本,而是工艺放大难题——67%项目在中试阶段因工艺问题失败。AI辅助无法替代工程经验,菌株-配方-工艺的三元适配需要长期数据积累。中试成本惊人,涉及设备折旧、原料消耗和稀缺工艺人才,而行业普遍回避讨论这些工程现实,导致认知偏差。建议创业者提前布局中试,将其视为核心竞争力而非简单成本项。合成生物学的真正瓶颈在于工程化能力,这需要时间沉淀而非技术叙事。

AIexander的博客 943

Java集合框架详解:Set与Map篇(快速入门)

上面这段代码定义了一个test方法,其主要功能是创建一个HashMap,其中键是String类型,值是类型。然后向HashMap中添加三对键值对,每对值都是一个List并包含不同数量的元素。接着通过entrySet方法获取HashMap中所有键值对的集合,使用迭代器遍历这个集合,对于每个键值对,先打印键,再使用另一个迭代器遍历对应的值列表并打印列表中的每个元素。

Lotarli的博客 764

Diffix3D+复现

上下载模型,将其放在一个目录中,并将目录名填在demo代码中from_pretrained的cache_dir参数里。目录结构应该是"<PATH>/nvidia/difix/…给的requirements文件中pytorch和xformers的版本没有指定,这里测试过以下版本,可以成功运行。将readme中的demo代码新建一个python脚本复制进去,然后将脚本放在src目录中运行。如果遇到网络问题无法加载huggingface上的预训练模型,可以手动从。如果出现,以下错误重新。

NeverMakeIt的博客 1088

STM32F103C8T6全桥逆变电路PWM波生成(基于HAL库)

全桥逆变电路需要两组开关管相互协同工作,故需要两路PWM控制信号,为了防止电源短路,需要保证同一桥臂的上下两个开关管不会同时导通,故两路PWM在相位上需要相差180°;为了保证高频变压器不会磁饱和,使正负半周PWM占空比相同。但是传统的互补输出达不到调节占空比调节输出电压的效果。......

weixin_45042735的博客 6025

JAVA快速入门到精通牛客零基础刷题指南:42,43 手把手带刷:集合类,Map 含方法详解

【代码】JAVA快速入门到精通牛客零基础刷题指南:42,43 手把手带刷:集合类,Map 含方法详解。

见字如面,祝您早安,午安,晚安 366

KiCad 7.0 + 嘉立创打样:从原理图到实物,打造你的双LLCC68 LoRa串口透传板

本文详细介绍了使用KiCad 7.0设计双LLCC68 LoRa串口透传板的完整流程,从原理图设计到嘉立创打样。重点解析了AVR+LLCC68组合的优势、双模块布局的电磁兼容设计、SPI接口配置及射频走线技巧,并提供了实测数据和常见问题解决方案,帮助开发者高效实现物联网设备的低功耗远距离通信。

weixin_28693447的博客 262

java基础——java集合map详解

Map接口是Java集合框架中的一部分,用于存储键值对(key-value pairs)。与List和Set不同,Map不继承自Collection接口,而是独立存在。Map中的每个元素都是一个键值对,其中键(key)是唯一的,而值(value)可以重复。Map接口允许通过键来快速查找、插入和删除对应的值。键的唯一性确保了每个键只能映射到一个值,但不同的键可以映射到相同的值。特点:基于引用地址判断键是否相等。使用场景:适用于需要精确对象比较的场景。

qq_47980550的博客 5227

Dify 第 2 篇 Dify 插件离线安装

Dify是一个支持插件扩展的AI平台,其插件市场提供5种类型插件(模型、工具、Agent策略、扩展、插件包)。由于默认pip安装速度慢,可通过dify-plugin-repackaging工具将插件转换为离线包(使用阿里云镜像加速)。该工具提供两种方式:1)自备Python环境执行脚本;2)使用Docker环境(推荐)。脚本支持从Dify市场或GitHub下载插件,并重新打包为含依赖的离线包,便于通过"本地插件"方式快速安装。

甘蓝的专栏 1270

医疗AI多智能体资源调度:用Python构建高性能MCU资源池

本文介绍了医疗AI服务平台中多智能体资源争用问题的解决方案。作者设计了一个基于MCU(多点控制单元)理念的中央资源调度器,通过三层架构(资源抽象层、调度策略层、执行控制层)实现对GPU、API、数据库等医疗资源的统一管理。系统采用增强版信号量机制处理可计数并发资源,优化令牌桶算法管理速率资源,并支持急诊优先、配额限制、审计合规等医疗场景特殊需求。核心代码提供了带优先级抢占的并发控制和医疗专用令牌桶实现,可有效解决多智能体资源争用导致的优先级混乱、资源利用不均等问题。

AllenLV的博客 3220

Map集合超详细讲解【从基础到进阶】

宝子们,今天我来给你们讲讲 Java 里超重要的 Map 集合。这玩意儿在编程里可太常用了,就像家里的万能工具箱,啥都能装,啥都能找,学会了它,写代码都能更顺溜!

潜意识Java的博客 3927

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【Java集合】双列集合Map详解,让你快速上手!

现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,学号与学生等,这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即java.util.Map接口。Map 接口下的集合与Collection 接口下的集合,他们的存储形式有所不同,如下图:Collection 集合,元素是独立的,存储的元素是一个一个的存储。Map中的集合,元素是成对出现。每个元素由键与值两部分组成,通过键可以找到所对应的值。

云端源想的博客 1236

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【java基础】Map集合

我们知道,在 Java 中,集合分为 Collection 单列集合 和 Map 双列集合那么什么是map呢?简单来说,map是一种将键映射到值的数据结构,每个键只能映射到一个值。而所谓 Map 接口,是 Java Collections Framework 中的一个接口,它继承了 Collection 接口,但与 List 和 Set 不同,Map 不是从 Collection 直接继承而来的。Map 是一个键值对的集合,每个键都唯一,而值可以重复。

C_Small_Cai的博客 1157

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java集合框架详解:List、Set、Map

接口:定义集合的抽象行为实现类:接口的具体实现算法:对集合进行操作的方法(如排序、搜索)Collection接口:存储单一元素的集合(List、Set、Queue)Map接口:存储键值对的集合。

weixin_56690213的博客 1686

Java 中的 Map 集合及其子类详解:HashMap 和 TreeMap

键唯一性:每个键在集合中都是唯一的,不能重复。值可以重复:不同的键可以对应相同的值。高效查找:通过键查找值的时间复杂度通常为O(1)(在HashMap中)。Map是一个接口,表示存储键值对的数据结构。键的唯一性保证了查找、插入、删除的效率,值可以重复。常见的实现类有HashMap和TreeMap。interface Map // K: 键类型, V: 值类型HashMap是Map接口的一个重要实现类,基于哈希表(Hash Table)实现。它提供了快速的查找、插入和删除操作,是在单线程。

Rockivy的博客 1529

string转map集合_集合详解

Map集是一个集合,它可以快速的查找现有的元素。但是,要查看一个元素,需要有要查找元素的副本。这不是一种非常通用的查找方式。通常,我们知道某些键的信息,并想要查找与之对应的元素。映射数据结构就是为此设计的。映射用来存放键/值对集。提供了键,就能找到值,键与值一一对应。例如,有一张关于员工信息的记录表,键为员工ID,值为Employee对象。Java为映射提供了Map接口;映射顺序 定义为...

weixin_39610594的博客 9052

Java 基础学习(十四)Map集合与Set集合

3、如果两个对象被equals()方法判断为不相等,不强制要求它们的hashCode()方法返回不同的哈希码,但是开发者应该了解,返回不同的哈希码有利于提高哈希表的性能。Map接口是一种双列集合。此处需要注意,HashMap并不会直接使用开发者指定的长度作为内部数组的长度,而是会通过一个内部方法,计算大于开发者指定长度的最小的2的幂作为内部数组的长度。4、链地址法:将Hash表的每个单元作为链表的头节点,所有Hash地址为i的元素构成一个同义词链表,即发生冲突时就把该元素链接在该单元为头节点的链表的尾部。

2301_79227925的博客 1192

【Java 基础篇】深入了解Java中的键值对集合:Map集合详解

本文详细介绍了Java中的Map集合,包括常见的Map实现类、基本操作、使用示例以及注意事项和最佳实践。Map是Java编程中非常有用的数据结构,掌握它的使用方法对于开发高效的应用程序非常重要。希望本文能够帮助您更好地理解和利用Java中的Map集合。

繁依Fanyi的博客 2909
上一篇: Java基础快速入门:HashSet深入解析
下一篇: Java基础快速入门: 可变参数与不可变集合
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值