JAVA基础-集合(二)
一、Map整体结构体系
Map是集合的另一大派系,与Collection派系不同的是Map集合是以键值对儿的形式存储在集合的。两个键为映射关系,
其中第一个键为主键(主键是唯一的不可重复),第二个键为value可以重复,他们两个是一对一的关系,可以存储集合或
自定义类的对象。其常用的实现类有HashMap、Properties。
二、Map接口
Map接口为该派的“掌门”,为我们提供了一些常用的集合操作:
(1)从此集合中移除所有映射关系(清空):
          clear()
(2)判断此集合是否包含指定主键:
          containsKey(Object key) - 返回值为boolean(true表示包含)
(3)判断此集合是否包含指定value:
          containsValue(Object value) - 返回值为boolean(true表示包含)
(4)返回此集合中包含的映射关系:
          entrySet() - 返回值为Set集合(用于遍历集合)
(5)比较指定的对象与此集合是否相等:
          equals(Object o) - 返回值为boolean(true表示相等)
(6)根据传入的Key值获取对应的Value:
          get(Object key) - 如果没有返回为空
(7)集合中是否存在此值:
          isEmpty() - 返回值为boolean(true表示不包含)
(8)返回此集合的全部key:
          keySet() - 返回值为包含可以的set集合(用于集合的遍历)
(9)将指定的值与此映射中的指定的key关联(赋值):
          put(K key, V value)
(10)通过key删除指定的映射关系:
            remove(Object key)
(11)返回此集合的映射关系数(长度):
            size() - 返回值为int
(12)通过集合返回所有的value:
            values() - 返回值为 Collection<V>集合
    举例:
 public static void main(String[] args) {
 //创建2个Student1类对象
 Student1 s1 = new Student1("zhangsan", 12);
 Student1 s2 = new Student1("wangwu", 17);
 //创建HashMap集合
 HashMap<Student1, String> map = new HashMap<>();
 //向集合里添加
 map.put(s1, "001");
 map.put(s2, "002");
 //获取所有的value
 Collection<String> values = map.values();
 for (String string : values) {
 System.out.println(string);
 }
 System.out.println("-----------");
 //通过keySet()遍历集合
 Set<Student1> keySet = map.keySet();
 for (Student1 student1 : keySet) {
 String string = map.get(student1);
 System.out.println(string + " " + student1);
 }
 System.out.println("-----------------");
 //通过entrySet()方式便利结合
 Set<Entry<Student1, String>> entrySet = map.entrySet();
 for (Entry<Student1, String> entry : entrySet) {
 //获取value
 String value = entry.getValue();
 //获取key
 Student1 key = entry.getKey();
 System.out.println(value + "-" + key);
 }
 }
三、HashMap类
HashMap类为Map接口的实现类,方法与Map接口相同,注意主键如果为自定义类的话要重写hashCode()和
equals(Object o) 方法,原因请看我的上一篇:JAVA基础-集合(一)。
举例:
 public static void main(String[] args) {
 // 创建学校的HashMap,value为一个HashMap
 HashMap<String, HashMap<String, String>> xuexiao = new HashMap<>();
 // 创建一班的HashMap
 HashMap<String, String> yiban = new HashMap<>();
 yiban.put("001", "小白");
 yiban.put("002", "小黑");
 // 创建二班的HashMap
 HashMap<String, String> erban = new HashMap<>();
 erban.put("0001", "王大崔");
 erban.put("0002", "花轮");
 // 将一班和二班添加到学校里
 xuexiao.put("一班", yiban);
 xuexiao.put("二班", erban);
 // 遍历学校集合
 Set<String> keySet = xuexiao.keySet();
 for (String key : keySet) {
 HashMap<String, String> hashMap = xuexiao.get(key);
 System.out.println(key);
 // 遍历班级集合
 Set<String> keySet2 = hashMap.keySet();
 for (String string : keySet2) {
 String string2 = hashMap.get(string);
 System.out.println("学号:" + string + ", 姓名:" + string2);
 }
 }
 }
四、Properties类
Properties 类为 Map 接口的另一实现类,表示了一个持久的属性集。与 IO 流一起配合使用。可
对Properties对象应用 put 和 putAll 方法,但不建议使用这两个方法,因为它们允许调用者插入其键或
值不是 String 的项。他的常用方法有:
(1)用指定的键获取对应的值:
          getProperty(String key) - 返回值为String
(2)将属性列表输出到指定的输出流:
          list(PrintStream out或PrintWriter out)
(3)输入流中读取属性列表(键和元素对):
          load(InputStream inStream或Reader reader)
(4)返回属性列表中所有键的枚举:
          propertyNames() - 返回值为Enumeration<?>(用于对Properties集合的遍历)
(5)给Properties集合进行赋值:
          setProperty(String key, String value)
(6)以你给出的字符和集合内容写入到文档里作为“标记”:
          store(OutputStream os或Writer writer, String comments)
    举例:
 public static void main(String[] args) throws IOException {
 // 创建Properties集合
 Properties pp = new Properties();
 // 创建输出流
 FileWriter writer = new FileWriter("c.properties");
 pp.setProperty("a", "1");
 pp.setProperty("b", "3");
 pp.setProperty("c", "4");
 // 将Properties集合里的数据写入文档,标记为Test
 pp.store(writer, "Test");
 writer.close();
 FileReader reader = new FileReader("c.properties");
 Properties pp1 = new Properties();
 // 读取到新的Properties里
 pp1.load(reader);
 // 通过propertyNames()方法遍历集合
 Enumeration<?> propertyNames = pp1.propertyNames();
 // 因为返回的是枚举所以用这种方法遍历
 while (propertyNames.hasMoreElements()) {
 String object = (String) propertyNames.nextElement();
 String property = pp1.getProperty(object);
 System.out.println(object + " " + property);
 }
 }
写入的c.properties文件
#Test
#Fri Sep 15 21:48:27 CST 2017
b=3
a=1
c=4
JAVA基础-集合(二)的更多相关文章
- Java基础-集合的嵌套
		
Java基础-集合的嵌套 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.静态导入 静态导入是在JDK1.5后的新特性,可以减少开发的代码量,但是实际用处是很一般,静态导入的标准 ...
 - Java实习生常规技术面试题每日十题Java基础(二)
		
目录 1. JAVA 的反射机制的原理. 2.静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同? 3.如何将String类型转化成Number类型. 4.什 ...
 - java 基础知识二 基本类型与运算符
		
java 基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...
 - java基础(二章)
		
java基础(二章) 一,变量 1.变量是内存中的一个标识符号,用于存储数据 2.变量命名规则 l 必须以字母.下划线 _ .美元符号 $ 开头 l 变量中,可以包括数字 l 变量中,不能出现特 ...
 - Java基础十二--多态是成员的特点
		
Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...
 - java基础-多线程二
		
java基础-多线程二 继承thread和实现Runnable的多线程每次都需要经历创建和销毁的过程,频繁的创建和销毁大大影响效率,线程池的诞生就可以很好的解决这一个问题,线程池可以充分的利用线程进行 ...
 - JAVA基础(二)—— 常用的类与方法
		
JAVA基础(二)-- 常用的类与方法 1 Math类 abs ceil floor 绝对值 大于等于该浮点数的最小整数 小于等于该浮点数的最大整数 max min round 两参数中较大的 两参数 ...
 - Java基础系列二:Java泛型
		
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.泛型概述 1.定 ...
 - Java基础——集合框架
		
Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...
 
随机推荐
- 基于.NET的弹性及瞬间错误处理库Polly
			
本文基本是官方说明的翻译和总结(https://github.com/App-vNext/Polly) 什么是Polly? Polly是一款基于.NET的弹性及瞬间错误处理库, 它允许开发人员以顺畅及 ...
 - 【HTML5】增强的表单
			
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
 - JS判断终端
			
//判断手机终端 if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) { window.location.href = 'mobil ...
 - AutoLayout的几种方法
			
1.XIB 2.Fram 3.屏幕比例适配(个人比较推荐) iOS屏幕适配(尺寸适配) 4.NSLayoutConstraint. 5.Masonry 概述 使用 Objective-C 纯代码编 ...
 - 推荐:让你快速搞定各服务端(api,pc,mobile,wechat)代码
			
如果你在写服务端 (PHP) ,会因为项目须求(做app.pc.mobiel.微信) 而写几套代码的,你不觉得很累吗? 现在的很多开源框架商用版本在做程序方面都是这么一套一套的,维护起来,二开起来特别 ...
 - bzoj 3991: [SDOI2015]寻宝游戏
			
Description 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄,然后可 ...
 - css弹性盒子新旧兼容
			
前言:本篇随笔是对弹性盒子有了解的人来写的这篇文章,具体属性产生的效果这里不做说明,基础的东西去查文档.这里只是总结. 时至今日,css3的flex弹性盒子在移动端基本上都是支持的,但不排除有些些低版 ...
 - Windows,Mac与Linux哪个更适合开发者?
			
以前写的,怕引来口水战,干脆不发.这段时间面试了十来人,用Mac的开发水平明显高于Windows的,挺多感想的,于是改改发了吧. Windows: 对普通用户而言体验最友好,对开发者 ...
 - springBoot系列教程01:elasticsearch的集成及使用
			
1.首先安装elasticsearch 集群环境,参考 http://www.cnblogs.com/xiaochangwei/p/8033773.html 注意:由于我的代码采用的是springbo ...
 - java 信号量Semaphore
			
Semaphore 信号量主要用于约束多个线程可同时获取的物理上的或者逻辑上的资源数.比如用在各种池的设计中. 信号量用于管理这些资源的一个虚拟的管理凭据.线程在获取一个资源时,首先要获取一个资源的许 ...