06二叉树、Map、Collections、适配器-2018/07/16

  • 1.set集合,无索引,不可以重复,无序(存取不一致)
  • 2.TreeSet用来对象元素进行排序,可以保证元素唯一
    • 储存自定义对象时重写compareTo方法
    • 自定义类implements Compare
  • 3.二叉树 两个叉
    • 小的储存在左边(负数),大的存储在右边(正数),相等不存(0)
    • 在TreeSet如何储存取决于compareTo方法的返回值
    • 比较器顺序(Comparator)
      • 创建TreeSet的时候可以制定 一个Comparator
      • 如果传入了Comparator的子类对象, 那么TreeSet就会按照比较器中的顺序排序
      • add()方法内部会自动调用Comparator接口中compare()方法排序
      • 调用的对象是compare方法的第一个参数,集合中的对象是compare方法的第二个参数
  • 4.Map接口
    • 将键映射到值的对象

      • 一个映射不能包含重复的键
      • 每个键最多只能映射到一个值
    • Map是双列的,Collection是单列的
    • Map的键唯一,Collection的子体系Set是唯一的
    • Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效
  • 5.Map集合的功能概述
    • a:添加功能

      • V put(K key,V value):添加元素。

        • 如果键是第一次存储,就直接存储元素,返回null
        • 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
    • b:删除功能
      • void clear():移除所有的键值对元素
      • V remove(Object key):根据键删除键值对元素,并把值返回
    • c:判断功能
      • boolean containsKey(Object key):判断集合是否包含指定的键
      • boolean containsValue(Object value):判断集合是否包含指定的值
      • boolean isEmpty():判断集合是否为空
    • d:获取功能
      • Set<Map.Entry<K,V>> entrySet():
      • V get(Object key):根据键获取值
      • Set keySet():获取集合中所有键的集合
      • Collection values():获取集合中所有值的集合
    • e:长度功能
      • int size():返回集合中的键值对的个数
  • 6.Map集合的遍历
    • 包含HashMap,LinkedHashMap,TreeMap
    • 一般默认用HashMap,效率高
    • 用迭代器,keySet(),get方法。或者增强for循环,keySet(),get方法
    • Map.Entry 将键和值封装成Entry对象,并存储在set集合中,通过entrySet方法实现
  • 7.LinkedHashMap 底层是链表实现的可以保证怎么存就怎么取
  • 8.HashMap和Hashtable
    • 共同点 :底层都是哈希算法,都是双列集合
    • 区别
      • Hashtable是JDK1.0版本出现的,是线程安全的,效率低,HashMap是JDK1.2版本出现的,是线程不安全的,效率高
      • Hashtable不可以存储null键和null值,HashMap可以存储null键和null值
  • 9.Collections成员方法
  • public static <T> void sort(List<T> list)
    public static <T> int binarySearch(List<?> list,T key) //二分查找法
    public static <T> T max(Collection<?> coll)
    public static void reverse(List<?> list) //翻转
    public static void shuffle(List<?> list) //随机置换,用来洗牌
  • 10.适配器
    • a.什么是适配器
    • 在使用监听器的时候, 需要定义一个类事件监听器接口.
    • 通常接口中有多个方法, 而程序中不一定所有的都用到, 但又必须重写, 这很繁琐.
    • 适配器简化了这些操作, 我们定义监听器时只要继承适配器, 然后重写需要的方法即可.
    • b.适配器原理
    • 适配器就是一个类, 实现了监听器接口, 所有抽象方法都重写了, 但是方法全是空的.
    • 适配器类需要定义成抽象的,因为创建该类对象,调用空方法是没有意义的
    • 目的就是为了简化程序员的操作, 定义监听器时继承适配器, 只重写需要的方法就可以了
  • 11.finally释放资源
05-15 00:02