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规范中定义了多个用于 ...
随机推荐
- [转帖]Android平台下OpenGL初步
原文请看 Android平台下OpenGL初步 本文只关注于如何一步步实现在Android平台下运用OpenGl. 1.GLSurfaceView GLSurfaceView是Android应用程序中 ...
- PairRDD中算子aggregateByKey图解
PairRDD 有几个比较麻烦的算子,常理解了后面又忘记了,自己按照自己的理解记录好,以备查阅 1.aggregateByKey aggregate 是聚合意思,直观理解就是按照Key进行聚合. 转化 ...
- LeetCode: Populating Next Right Pointers in Each Node II 解题报告
Populating Next Right Pointers in Each Node IIFollow up for problem "Populating Next Right Poin ...
- Android几种layout(布局)的区别
1.FrameLayout:children按照从左上开始的顺序排列,主要用于tabed view或者图片切换功能:最简单的布局模型,在这种布局下每个添加的子控件都被放在布局的左上角,并覆盖在前一子控 ...
- 路由器的LAN口和WAN口有什么区别
路由器WAN接口连接的是外网,拉进来的网线就是接这个接口. 路由器LAN接口是连接的内网,家里如有几台设备需要拉线上网都是从这个接口接出去的. 路由器(Router,又称路径器)是一种计算机网络设 ...
- python基础系列教程——Python3.x标准模块库目录
python基础系列教程——Python3.x标准模块库目录 文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata ...
- Android——单例模式
详细的各种模式 http://mobile.51cto.com/android-419145.htm http://wenku.baidu.com/link?url=f3yjQ6YvslvHcWJLb ...
- java-基于Servlet3.0的文件上传
Servlet3.0学习总结(三)——基于Servlet3.0的文件上传 在Servlet3.0中使用request.getParts()获取上传文件
- ubuntu rails3.2.16 提示gem mysql adapter
把database.yml的adapter改为mysql2 把Gemfile文件中的gem mysql改为gem mysql2
- Spring Boot 官方文档学习(一)入门及使用
个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问题. 其他说明:如果对Spring Boot没有概念, ...