6.Java加强-Map、Properties、Collections

  • Map-HashMap【映射:由一个键指向一个值(键值是一对一的)】(重点掌握)
  • Properties 配置文件
  • Collections 工具类(掌握)
  • 泛型(掌握语法)

一、回顾

  • Timer定时器:
    • Timer:其实就是创建一个线程并且启动
    • TimerTask:就是Runnable的实现类
    • (类是起到数据模板的作用)
    • (接口是起到规范统一的作用)
  • 数据结构
    • 基于数组的数据结构
      • 数组的创建方式:静态和动态
      • 数组的特点:长度固定
      • 数组有下标:查改快,增删插慢
    • 基于链表的数据结构
      • 增删插快,查改慢
    • 基于树形的数据结构
    • 栈结构:先进后出
    • 双向队列:头尾(增删查改插)快
  • 集合:保存数据的容器,基于某种数据结构
    • 体系结构:
      • Collection
        • List:有序可重复
          • ArrayList
          • LinkedList
          • Vector
        • Set:无序不可重复
        • 无序形成的原因:存放元素下标需要计算,底层数组的长度又是可以变化,计算出的位置是变化的
          • Hashset
          • LinkendHashset(哈希表+链表)
          • TreeSet(树形结构)

二、Map-HashMap

1. 什么是Map?:
  • Map是存放键值对(Entry:key value)的集合,存放的是一堆对值,key不能重复,value可以重复,一个key只能对应一个值
    • key不能重
    • value可以重复
    • 一个key(键)只能对应一个值
2. Map的使用场景:
    • 身份证号码 --- 人
    • 只要是操作一堆纸,就需要使用map
    • 存放一堆值:使用Entry;
    • 一般使用map集合就都使用hashMap,需要为维护顺序使用LinkedHashMap,需要操作属性文件使用Properties,需要按,键的大小排序TreeMap;
3. map接口中的常用方法介绍:
    • clear():清空Map集合
    • containsKey(Object key):判断该集合中是否存在传入的key
    • containsValue(Object value):判断该集合中是否存在传入值
    • get(Object key):根据传入的键,获取对应的值
    • isEmpty():判断集合是否为空
    • put(k key,V value):向集合添加一个键值对(Entry),k是键 , v是值
    • putAll(Map <? entends k ,? extends v>m):将传入集合中所有的键值对加入
    • remove(Object key): 通过传入的键在集合中删除这个键值对
    • size():获取集合键值对的对数

没有修改的方法?使用put(),只要键相同就发生覆盖,就是修改功能

4. Map集合遍历的方法
    • 1.键和值都需要遍历
      • Set entrySet():将集合中的键值对(Entry)放入Set集合中
    • 2.只需要遍历键
      • Set keySet():将所有的键放入Set集合中
    • 3.只需要值
      • Collection values():将键值中所有的值放入集合中
5. Map的体系结构
  • Map是接口
  • 哈希表(散列表:数组+链表)
  • 常用实现的子类
    • HashMap:基于哈希表(散列表:数组+链表)的实现,线程不安全,是无序,添加Entry的顺序和遍历的顺序不能保证一致不变
      • 哈希表:底层是一个数组,数组中元素是一个链表
      • 存在的位置需要通过Hash值来计算
        • 存放的位置:
          • key的hashCode % 底层数组的长度,默认长度为16
          • 计算出的位置上有元素,这个时候就会发生哈希碰撞(哈希冲突),元素只能保存在链表上
        • HashMap添加元素的流程
HashMap map = new HashMap() //底层创建一个长度16的数组
map.put("a",你好);
        • 键是不重复的,去重机制:
          • 1.将键:"a"的hashCode获取
          • 2.去查看集合有没有一个键的hashCode和“a”的一样
            • 没有:说明这个键在集合不存在
              • 计算存放的下标位置,得到位置的下标
              • 这个位置上如果没有值,直接将键值对放入这个位置
              • 这个位置如果有值,是将这个元素加到这个位置的链表上去
            • 有:说明hashCode遇到相同的
              • 比较他们的equals
              • 不同:说明键在集合中不存在,开始计算位置并添加
              • 相同,说明键在集合已经存在,覆盖这个键对应的值-
  • HashTable:线程安全的,不允许空值空键,null作为值
    • properties:属性键值对,键和值都只能是字符串String,作用是读写属性文件的,解决编码问题
  • TreeMap:基于树形结构的集合,可以根据键来做升序排列
    • 当某个链表上的元素(Entry)个数大于等于8
      • 去统计集合中所有的元素个数,如果个数大于64个
      • 这个时候链表会形成树形(红黑树),提高查询效率
      • 去统集合中所有元素的个数,如果总个数小于64
      • 说明哈希碰撞很严重将数组扩容一次
    • 如果一个链形成了树,但是这个链上的元素个数已经小于等于6,这个树就会转为链表
  • TreeMap集合
    • 底层使用的是红黑树结构
      • 填加集到集合需要实现Comparable
      • 去重机制:自然比较器或定制比较器的方法返回0
    • TreeMap的键可以是任意类型,但是会以第一个加入的类型为准

三、特殊的集合Properties

  • 用来操作属性文件的集合
  • 属性文件:Properties
    • propertie:文件中存放的就是键值对【Entry】
    • 使用propertie操作属性文件作用:解决硬编码
1. 常用方法:

四、Collections(工具类)

类方法:对象.

静态方法:类名.

  • addAll(All(Collection<? super T>c , T ... eelements)):简化添加元素
  • fill:快速填充
  • max:找集合中最大值
  • min:找集合中最小值
  • reverse(List<?>List):反转集合的元素
  • shuffle(List<?>List):洗牌,打乱集合中元素的顺序
  • sort(List<T>List):排序【升序】
  • swap(List<?>List,int i , int j):交换;两个位置的元素

五、泛型

  • 泛型:限制集合中元素的数据类型
  • 作用:检查元素的类型,避免向上转型
  • 类型的使用:<数据类型【只能使用引用类型】>
  • 泛型的上下限:
    • 上限:最大只能到那个类型<? extends 固定类型>
    • <? extends Number>:数据最大取到Nunmber
    • 下限:最小只能取到的类型<? super Number>
    • <? super Number>:数据最小取到Nunmber
  • 泛型表示的数据类型:
    • E Element 元素,任意的元素类型,意思等价Object
    • T Type 类型
    • K key 键
    • V Value 值
    • R return 返回值的类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值