Java精选笔记_集合【Map(映射)接口】
Map(映射)接口
简介
该集合存储键值对,一对一对的往里存,并且键是唯一的。要保证map集合中键的唯一性。
从Map集合中访问元素时,只要指定了Key,就能找到对应的Value。
关键字是以后用于检索值的对象。
常见操作
1.添加
put(key,value): 当存储的键相同时,新的值会替换老的值,并将老值返回。如果键没有重复,返回null。
void putAll(Map);
2.删除
void clear(): 清空
value remove(key) :删除指定键
3.判断
boolean isEmpty():
boolean containsKey(key): 是否包含key
boolean containsValue(value) :是否包含value
4.取出
int size(): 返回长度
value get(key) : 通过指定键获取对应的值。如果返回null,可以判断该键不存在。
当然有特殊情况,就是在hashmap集合中,是可以存储null键null值的。
Collection values(): 获取map集合中的所有的值。
获取map中的所有元素
原理:map中是没有迭代器的,collection具备迭代器,只要将map集合转成Set集合,可以使用迭代器了。
之所以转成set,是因为map集合具备着键的唯一性,其实set集合就来自于map,set集合底层其实用的就是map的方法。
把map集合转成set的方法:
Set<k> keySet(); //将map中所有的键存到Set集合。
Set<k,value> entrySet();
//取的是键和值的映射关系。
Entry就是Map接口中的内部接口;
为什么要定义在map内部呢?
entry是访问键值关系的入口,是map的入口,访问的是map中的键值对。
方式一:keySet()方法。
可以将map集合中的键都取出存放到set集合中。对set集合进行迭代。迭代完成,再通过get方法对获取到的键进行值的获取。
Set keySet = map.keySet();
Iterator it = keySet.iterator();
while(it.hasNext()) {
Object key = it.next();
Object value = map.get(key);
System.out.println(key+":"+value);
}
方式二:entrySet()方法。
先获取集合中的所有的映射关系,然后从映射关系中取出键和值。
在Map中,还提供了一个values()方法,通过这个方法可以直接获取Map中存储所有值的Collection集合。
Set<map.entry<String,String>> entrySet = map.entrySet();
Iterator<map.entry<String,String>> it = entrySet.iterator();
while(it.hasNext()) {
Map.Entry me = (Map.Entry)it.next();
System.out.println(me.getKey()+":"+me.getValue());
}
hashTable散列表
Map接口中还有一个实现类Hashtable,它在存取元素时速度很慢,目前基本上被HashMap类所取代。
底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的
HashMap集合
是Map接口的一个实现类,它用于存储键值映射关系,但必须保证不出现重复的键。
底层是哈希表数据结构,允许使用null值和null键,是不同步的,效率高。键的类必须重写hashCode和equals方法
HashMap类使用散列表实现Map接口
HashMap集合迭代出来元素的顺序和存入的顺序是不一致的。
HashMap实现Map并扩展AbstractMap
在向HashMap中添加元素时,不但要将元素添加,还要为每个元素设置一个Hash码。Hash码不只可以为数字,同样它也可以为字符串。
LinkedHashMap类
是HashMap的子类,和LinkedList一样也使用双向链表来维护内部元素的关系,使Map元素迭代的顺序与存入的顺序一致。
构造方法
HashMap()方法 构造一个默认的散列映射
HashMap(Map m)方法 用类m中的元素初始化散列映射
HashMap(int Capacity)方法 将散列集合的容量初始化为capacity
HashMap(int Capacity, float fillRadio)方法 用参数同时初始化散列映射的容量和填充比
主要方法
public void clear() 删除映射中所有映射关系
public boolean containsKey(Object key) 判断HashMap中是否包指定的键的映射关系,如果包含则返回true
public boolean containsValue(Object value) 判断HashMap中是否包指定的键值的映射关系
public V get(Object key) 返回参数key键在该映射中所映射的值
public boolean isEmpty() 判断HashMap中是否包含键-值映射关系,如果不包含则返回true
public V put(K key, V value)
在映射中放入指定值与指定键
public void putAll(Map m) 将指定映射的所有映射关系复制到此映射中
public int size() 返回映射中键-值映射关系的数目
public V remove(Object key) 删除映射中存在该键的映射关系
TreeMap集合
TreeMap集合是用来存储键值映射关系的,其中不允许出现重复的键。
底层是二叉树结构,线程不同步,可以用于给Map集合中的键进行排序。键必须是Comparable接口的子类型
在TreeMap中是通过二叉树的原理来保证键的唯一性,这个TreeSet集合存储的原理一样,因此TreeMap中所有的键是按照某种顺序排列的。
TreeMap类通过使用树实现Map接口。TreeMap提供了按排序顺序存储关键字/值对的有效手段,同时允许快速检索。不像散列映射,树映射保证它的元素按照关键字升序排序。
TreeMap实现SortedMap并且扩展AbstractMap。本身并没有定义其他方法。
构造方法
TreeMap()方法 构造一个空树的映射
TreeMap(Map m)方法 用类m中的元素初始化树映射,使用关键字按自然排序
TreeMap(Comparator comp) 构造一个空的基于树的映射通过使用Comparator来排序
TreeMap(SortedMap sm)方法 用从sm的输入来初始化一个树映射
方法
clear() 从此TreeMap中删除所有映射关系
clone()
返回TreeMap实例的浅表复制
comparator() 返回用于对此映射进行排序的比较器,如果此映射使用它的键的自然顺序,则返回null
containsKey(Objectkey) 如果此映射包含对于指定的键的映射关系,则返回true
containsValue(Objectvalue)
如果此映射把一个或多个键映射到指定值,则返回true
entrySet() 返回此映射所包含的映射关系的set视图
firstKey() 返回有序映射中当前第一个键
get(Objectkey) 返回此映射中映射到指定键的值
headMap(KtoKey) 返回此映射的部分视图,其键严格小于toKey
keySet() 返回此映射中所包含的键的Set视图
lastKey() 返回有序映射中当前最后一个键
Properties(属性)集合
是hashtable的子类,具备map集合的特点,里面存储的键值对都是字符串。文件流和键值对相结合 就用此集合
是集合中和IO技术相结合的集合容器
该对象的特点:可以用于键值对形式的配置文件,可以操作键盘的数据。
//设置和获取元素。
Properties prop =new Properties();
prop.setProperty("张三","30");//添加,修改
sop(prop);
prop.getProperty("键");
循环获取
Set<String> names=prop.stringPropertyNames();
for(String s : names) {
prop.getProperty(s);
}
Properties存取配置文件,将文本a.txt中的数据存到集合中进行操作。
步骤:1.用一个六和info.txt关联
2.读取一行数据,用该行数据用"="尽情切割
3.封号左边作为建,右边作为值,存储到Properties集合中即可
BufferedReader bufr=new BufferedReader(new FileReader("a.txt"));
String line=null;
Properties prop =new Propertites();
while((line=bufr.readLine())!=null) {
String[] arr =line.split("=");
prop.setProperty(arr[0],arr[1]);
}
简便方法
Properties prop =new Propertites();
FileInputStream fis=new FileInputStream("a.txt");
//将流中的数据加载进集合
prop.load(fis);
prop.list(System.out);
练习,用于记录应用程序运行次数,如果使用次数已经到,就给出注册提示。
Properties prop=new Properties();
File file=new File ("count.ini");
if(!file.exists()) {
file.createNewFile();
FileInputStream fis=new FileInputStream(file);
prop.load(fis);
int count=0;
String value=prop.getProperty("time");
if(value!=null) {
count=Integer.parseInt(value);
if(count>=5) {
System.out.println("您使用的次数已到");
return;
}
}
count++;
prop.setProperty("time", count+"");
FileOutputStream fos=new FileOutputStream(file);
prop.store(fos, "");
fos.close();
fis.close();
}
Java精选笔记_集合【Map(映射)接口】的更多相关文章
- Java精选笔记_集合概述(Collection接口、Collections工具类、Arrays工具类)
集合概述 集合有时又称为容器,简单地说,它是一个对象,能将具有相同性质的多个元素汇聚成一个整体.集合被用于存储.获取.操纵和传输聚合的数据. 使用集合的技巧 看到Array就是数组结构,有角标,查询速 ...
- Java精选笔记_集合【List(列表)接口】
List(列表)接口 简介 List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象称为List集合. 元素是有序的,即元素的存入顺序和取出顺序一致, ...
- Java精选笔记_集合【Set(集合)接口】
Set(集合)接口 简介 同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了. ...
- Java精选笔记_面向对象(包、访问控制、内存机制、垃圾回收机制)
包 包的定义与使用 专门用来存放类的,通常功能相同的类存放在相同的包中. 包的声明只能位于Java源文件的第一行 Java语言中的常用包 java.lang:包含Java语言的核心类,如String. ...
- Java精选笔记_文件上传与下载
文件上传与下载 如何实现文件上传 在Web应用中,由于大多数文件的上传都是通过表单的形式提交给服务器的,因此,要想在程序中实现文件上传的功能,首先得创建一个用于提交上传文件的表单页面. 为了使Serv ...
- Java精选笔记_会话技术
会话及其会话技术 会话概述 指的是一个客户端(浏览器)与Web服务器之间连续发生的一系列请求和响应过程. 会话:从浏览器开启到浏览器关闭.会话技术:用来保存在会话期间 浏览器和服务器所产生的数据. 在 ...
- Java精选笔记_面向对象(慨念、类和对象)
面向对象概念 在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象. 相对于面向过程而言.是一种思想,强调的是功能的对象. 面向对象的本质:以类的方式组织代码, ...
- Java精选笔记_国际化
国际化 什么是国际化 指软件在开发时就应该具备支持多种语言和地区的功能,当应对不同国家和地区的用户访问,针对不同国家和地区的用户,提供相应的.符合来访者阅读习惯的页面和数据. 由于国际化interna ...
- Java精选笔记_自定义标签
自定义标签 自定义标签入门 什么是自定义标签 自定义标签可以有效地将HTML代码与Java代码分离,从而使不懂Java编程的HTML设计人员也可以编写出功能强大的JSP页面 JSP规范中定义了多个用于 ...
随机推荐
- 对JAVASCRIPT匿名函数的理解
网上很多解释,我无法理解,我想知道原理...这篇文章应该可以透彻一点 Query片段: (function(){ //这里忽略jQuery所有实现 })(); 要说匿名函数,我们首先要由函数本身说起. ...
- LeetCode: Valid Sudoku 解题报告
Valid SudokuDetermine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku boa ...
- Makefile学习之路——4
变量的类别有递归扩展变量和简单扩展变量.只用一个“=”符号定义的变量被称为递归扩展变量.通过下面例子观察递归扩展变量的特点. .PHONY: all foo=$(bar) bar=$(ugh) ugh ...
- dp之分组背包hdu3535(推荐)
题意:有0,1,2三种任务,0任务中的任务至少得完成一件,1中的任务最多完成1件,2中的任务随便做.每一个任务最多只能做一次 .n代表有n组任务,t代表有t分钟,m代表这组任务有m个子任务,s代表这m ...
- 在mac电脑上写入文件到NTFS格式的移动硬盘的解决办法
需求背景: 今天我在Mac电脑A上下载了11G的资料,想传给Mac电脑B,试用了AirPort.文件共享.远程操作等,传输速度都慢得要死,虽然是在同一个局域网下,两台电脑挨的非常的近,但是还是传得超级 ...
- iOS菊花加载圈
自定制一个继承于UIView的类然后重写initWithFrame方法;如下 - (id)initWithFrame:(CGRect)frame { self = [super initWithFra ...
- 基于html5鼠标悬停图片动画展示效果
分享一款基于html5鼠标悬停图片动画展示效果.里面包含两款不同效果的html5图片展示效果.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class=" ...
- 更改nginx站点根文件夹
默认站点根文件夹为/usr/local/nginx/html.要将它改成/homw/www vi /usr/local/nginx/conf/nginx.conf 将当中的 locat ...
- CAS (4) —— CAS浏览器SSO访问顺序图详解(CAS Web Flow Diagram by Example)
CAS (4) -- CAS浏览器SSO访问顺序图详解(CAS Web Flow Diagram by Example) tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0 ...
- 对设计领域中Tile和Card的理解
前端工程师离不开设计, 谈到设计就要想到大名鼎鼎的material design主题, 而material是以card为经典单元的, card即卡片, 是层次化模型的最小模块, 用于提供扁平化的信息, ...