疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

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类的相关方法
 
 
 
Object setProperty(String key ,String value) 往集合中添加键值对,调用Hashtable的方法put添加
String getProperty(String key ) ,通过key获取value的值,相当于Map集合中的get(key) 方法
Set<String >   stringPropertyNames()返回此属性列表的键集。相当于Map集合中的keySet()方法;
  Properties类的load方法:
 
    可以把文件中存储的键值对,读取到集合中使用
 
 void load(Reader reader)  
 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 之后出现的新特性
 
  作用:
 
    定义方法时,方法参数的类型确定,但是个数不确定,可以使用可变参数
 
 
 
  格式:
 
    修饰符  返回值类型  方法名(数据类型...变量名){
 
    }
 
  使用注意:
 
  可变参数的底层原理就是一个数组
  传递不同个数的参数,会创建不同长度的数组,接收这些参数可变参数的方法,调用的时候,可以不传递参数,传递任意个参数
  注意事项:
 
一个方法的参数,只能定义一个可变参数
如果方法的参数有多个,那么可变参数必须写在列表的最后一位
 
 
 
 
Collections集合工具类
 
 
 
  Java.util.Collections 集合工具类
 
  Collections私有了无参构造方法,里面的方法全是静态的,通过类名可以直接使用
 
  Collections 常用方法:
 
    1. static void shuffle(List<?> list) 使用默认随机源对指定列表进行置换,(打乱集合中元素的顺序)
 
    2.static void sort(List<?> list ) 根据元素的自然顺序,对指定列表按照升序进行排序(对集合进行升序排序)