java学习笔记—集合之Map集合

Map集合

Map接口概述:

  Java.util.Map<k,v>接口:是一个双列集合

  Map集合的特点:

  • 是一个双列集合,有两个泛型key和value,使用的时候key和value的数据类型可 以相同。也可以不同
  • Key不允许重复的,value可以重复的;
  • 一个key只能对应一个value

 

Map常用实现类概述:

  Java.util.HashMap<k,v> 集合implements Map<k,v>接口

  HashMap集合的特点:

  • 底层是一个哈希表(数组+单向链表):查询快,增删快
  • 是一个无序集合

 

Map接口中的常用方法:

  • 1.V   get(key)  根据key值返回对应的value值,key值不存在则返回null
  • 2.V  put(key , value); 往集合中添加元素(key和value
    •   注意:添加的时候,如果key不存在,返回值null
    •   如果Key已经存在的话,就会新值替换旧值,返回旧值
  • 3. V  remove(key); 删除key值对应的键值对;如果key不存在 ,删除失败。返回值为 null,如果key存在则删除成功,返回值为删除的value

 

Map遍历方式

  • 第一种方式:通过key找value的方式:

    Map中有一个方法:

      Set <k>  keySet();  返回此映射包含的键的Set 集合

     操作步骤:

      1.调用Map集合的中方法keySet,把Map集合中所有的健取出来,存储到Set集合中

       2.遍历Set集合,获取Map集合中的每一个健

      3.通过Map集合中的方法get(key),获取value

   可以使用迭代器跟增强for循环遍历

 

  第二种方式:Map集合遍历键值方式

    Map集合中的一个方法:

    Set<Map.Entry<k,v>> entrySet(); 返回此映射中包含的映射关系的Set视图

  使用步骤

     * 1.使用Map集合中的方法entrySet,把键值对(键与值的映射关系),取出来存储到Set 集合中

     * 2.遍历Set集合,获取每一个Entry对象

     * 3.使用Entry对象中的方法getKey和getValue获取健和值

  可以使用迭代器跟增强for循环遍历

 

 

HashMap存储自定义类型:

  使用HashMap储存自定义类形式,因为要保证key的唯一性。需要自定义类重写 hashCode()跟equals()方法;

 

LinkedHashMap

  Java.util.LinkedHashMap<k,v> 集合extends HashMap<k,v> implements Map<k,v>

  特点:

    1.底层是一个哈希表(数组+单向链表)+链表

    2.是一个有序集合

 

Hashtable

  Map 的实现类 Hashtable

     底层数据结构是哈希表,特点和 hashMap 是一样的

     Hashtable 是线程安全的集合,是单线程的,运行速度慢

     HashMap 是线程不安全的集合,是多线程的,运行速度快

 

     Hashtable 命运和 Vector 是一样的,从 JDK1.2 开始,被更先进的 HashMap 取代

 

     HashMap 允许存储 null 值,null

     Hashtable 不允许存储 null 值,null

 

     Hashtable 他的孩子,子类 Properties 依然活跃在开发舞台

 

 

 

Properties

Java.util.Properties 集合extends Hashtable<k,v> 集合

Properties 集合特点:

  • Properties集合也是一个双列集合,key跟value都已经被内置为String类型
  • Properties集合是一个唯一和IO流相结合的集合
  • 可以将集合中存储的临时数据,持久化到硬盘的文件中储存
  • 可以把文件中储存对的键值对,读取到集合中使用

 

  Properties集合的基本操作:添加数据,遍历集合

    Key和value都已经被内置为String类型。里面包含了一些和String类的相关方法

 

  1. Object setProperty(String key ,String value) 往集合中添加键值对,调用Hashtable的方法put添加
  2. String getProperty(String key ) ,通过key获取value的值,相当于Map集合中的get(key) 方法
  3. Set<String >   stringPropertyNames()返回此属性列表的键集。相当于Map集合中的keySet()方法;

  Properties类的load方法:

    可以把文件中存储的键值对,读取到集合中使用

  1. void load(Reader reader)  
  2. void load(InputStream inStream)  
  • * 参数:
  • Reader reader:字符输入流,可以使用FileReader
  • InputStream inStream:字节输入流,可以使用FileInputStream
  • * 
  • * 操作步骤:
  • 1.创建Properties集合对象
  • 2.创建字符输入流FileReader对象,构造方法中绑定要读取的数据源
  • 3.使用Properties集合中的方法load,把文件中存储的键值对,读取到集合中使
  • 4.释放资源
  • 5.遍历Properties集合
  • * 
  • * 注意:
  • 1.流使用Reader字符流,可以读取中文数据
  • 2.流使用InputStream字节流,不能操作中文,会有乱码
  • 3.Properties集合的配置文件中,可以使用注释单行数据,使用#
  • 4.Properties集合的配置文件中,key和value默认都是字符串,不用添加""(画蛇 添足)
  • 5.Properties集合的配置文件中,key和value的连接符号可以使用=,也可以使用 空格

Properties类的store方法使用:

/*

* 可以把集合中存储的临时数据,持久化都硬盘的文件中存储

* void store(Writer writer, String comments)  

* void store(OutputStream out, String comments)

* 参数:

*  Writer writer:字符输出流,可以使用FileWriter

*  OutputStream out:字节输出流,可以使用FileOutputStream

*  String comments:注释,解释说明存储的文件,不能使用中文(乱码),默认编码格式为 Unicode编码

* 可以使用""空字符串

* 操作步骤:

* 1.创建Properties集合,往集合中添加数据

* 2.创建字符输出流FileWriter对象,构造方法中绑定要写入的目的地

* 3.调用Properties集合中的方法store,把集合中存储的临时数据,持久化都硬盘的文 件中存储

* 4.释放资源

* 

* 注意:

* 1.流使用Writer字符流,可以写入中文数据的

* 2.流使用OutputStream字节流,不能操作中文,会有乱码

* 3.Propertie集合存储的文件,一般都以.properties结尾(程序员默认)

 

 

方法的可变参数

  Jdk1.5 之后出现的新特性

  作用:

    定义方法时,方法参数的类型确定,但是个数不确定,可以使用可变参数

 

  格式:

    修饰符  返回值类型  方法名(数据类型...变量名){

    }

  使用注意:

    •   可变参数的底层原理就是一个数组
    •   传递不同个数的参数,会创建不同长度的数组,接收这些参数可变参数的方法,调用的时候,可以不传递参数,传递任意个参数

  注意事项:

  1. 一个方法的参数,只能定义一个可变参数
  2. 如果方法的参数有多个,那么可变参数必须写在列表的最后一位

 

 

Collections集合工具类

 

  Java.util.Collections 集合工具类

  Collections私有了无参构造方法,里面的方法全是静态的,通过类名可以直接使用

  Collections 常用方法:

    1. static void shuffle(List<?> list) 使用默认随机源对指定列表进行置换,(打乱集合中元素的顺序)

    2.static void sort(List<?> list ) 根据元素的自然顺序,对指定列表按照升序进行排序(对集合进行升序排序)

posted @ 2017-12-16 22:55  猿上生活  阅读(841)  评论(0编辑  收藏  举报