黑马程序员-java基础之Map集合

来源:互联网 发布:gta5n卡优化设置 编辑:程序博客网 时间:2024/05/09 18:52
---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

一.TreeSet
 1.什么是TreeSet
  TreeSet是一种可以指定顺序的Set集合, 指定顺序的方式有两种: 自然顺序(Comparable), 比较器(Comparator)
 2.Comparable
  在要放入TreeSet集合的类上实现Comparable接口, 重写compareTo()方法, 对象存入TreeSet的时候就会按照compareTo()方法排序
 3.Comparator
  如果两个TreeSet存储同一类型对象, 需要使用不同顺序, 那么Comparable接口就无法满足这样的需求了, compareTo()方法只有一个, 无法定义两种比较方式.
  如果不希望TreeSet按照Comparable的顺序排序, 可以在创建TreeSet的时候, 在构造函数中传入一个比较器Comparator.
  创建TreeSet对象时, 构造函数可以接收一个Comparator类型的对象
  由于Comparator是一个接口,我们可以自定义一个Comparator类的子类, 重写compare()方法
  一旦构造函数中传入了Comparator, TreeSet将不再按照Comparable中的顺序排序, add()方法执行时自动按照Comparator的顺序排序
  
二.集合分类
 Collection: 单列集合, 一次存一个对象
  List: 可重复, 有索引
   ArrayList: 数组实现, 查找快, 增删慢
   LinkedList: 链表实现, 增删快, 查找慢
   Vector:  原理和ArrayList相同, 线程安全, 效率较低
   Stack:  栈, 先存的对象最后才能被取出
  Set:  不重复, 无索引
   HashSet:  使用哈希算法, 去重复, 速度快.
   TreeSet:  使用二叉树算法, 按照指定顺序排序. 指定顺序的方式有两种: 自然顺序, 比较器
   LinkedHashSet: HashSet的子类, 也是使用哈希算法, 但可以保留存储顺序.
 Map: 键值对, 一次存两个对象
 HashMap、TreeMap
三.Map集合
 1.什么是Map集合
  Map集合用来存储键值对, 每次存储2个对象, 一个键一个值, 可以根据键查找值, 键必须唯一.
 2.Map集合常用方法
  V put(K key, V value)
   存储一个键值对, 如果键在集合中存在, 值将会覆盖原有值, 并且返回原有值.
  V get(Object key)
   根据键获取值, 如果不存在, 返回null
  V remove(Object key)
   根据键删除值, 并将值返回, 如果不存在, 返回null
  boolean containsKey(Object key)
   判断指定的键对象是否存在
 3.HashMap集合的遍历由于Map无法用迭代器迭代,所以先用keySet()方法获得键值对   象,再通过键值对象获取到相应值。
  keySet:
   Map集合的keySet()方法可以得到一个所有键对象组成的Set集合
   遍历这个Set集合可以得到每一个键对象
   再根据键对象即可获取值
   Set<String> set = map.keySet();
   for (String str : set) {
   System.out.println(str + ":" + map.get(str));
   }
   entrySet:
   Map集合的entrySet()方法可以得到一个所有Entry对象(键值对)组成的Set
   遍历这个Set集合可以得到每一个Entry对象   
   再使用Entry的getKey()方法和getValue()方法获取键和值
   Set<Entry<String, Integer>> set = map.entrySet();
   for (Entry<String, Integer> e : set) {
   System.out.println(e.getKey() + ":" +         e.getValue());
   }
  HashMap存储和查找原理:
  存储:HashMap存储一个键值对的时候, 先会调用键对象的hashCode()方法得   到哈希吗,然后在集合中查找是否有哈希值相同的键对象,如果没有哈希值相同的  键对象, 直接将键值对存入,如果有哈希值相同的键对象, 逐个和这些键对象进   行equals()方法比较,比较的结果为false就将键值对存入,比较的结果为true  则用新的值覆盖原有值。
  查找:HashMap在根据指定的键对象获取值的时候, 先对键对象调用    hashCode()方法, 得到哈希值然后在集合中查找哈希值相同的对象, 逐个   equals()方法比较找到equals()结果为true的键值对, 将值返回。
 4.Map集合的常用实现类
  HashMap:  使用哈希算法对键对象去重复
  TreeMap:  使用二叉树算法对键对象排序
  存储和查找:TreeMap在存储键值对的时候, 会调用键对象的compareTo()方法  和集合中其他的键对象进行比较, 根据比较结果以二叉树形式存储,如果   TreeMap创建的时候在构造函数中传入了比较器, 那么存储顺序以比较器为   准。
  LinkedHashMap: HashMap的子类, 去重复的同时保留存储顺序
  Hashtable:  和HashMap原理相同, 都是使用哈希算法去重复. 线程  安全, 效率略低. 键和值都不允许为null
  Properties: 键和值都是String, 用来存储一些配置项
---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

原创粉丝点击