day06-Map集合,HashMapTreeMap,排序算法

目标:Map集合概述

Map集合是另一个集合体系。
Collection是单值集合体系。

Map集合是一种双列集合,每个元素包含两个值。
Map集合的每个元素的格式:key=value(键值对元素)。
Map集合也被称为“键值对集合”。

Map集合的完整格式:{key1=value1 , key2=value2 , key3=value3 , ...}

Map集合有啥用?
   1.Map集合存储的信息更加的具体丰富。
        Collection: ["苍老师","日本","女","动作演员",23,"广州"]
        Map : {name="苍老师" , jiaxiang=小日本 , sex="女" , age = 23 , addr=广州}

   2.Map集合很适合做购物车这样的系统。
        Map:  {娃娃=30 , huawei=1 , iphonex=1}

注意:集合和泛型都只能支持引用数据类型,集合完全可以称为是对象容器,存储都是对象。

Map集合的体系:
        Map<K , V>(接口,Map集合的祖宗类)
       /                      \
      TreeMap<K , V>           HashMap<K , V>(实现类,经典的,用的最多)
                                 \
                                  LinkedHashMap<K, V>(实现类)

Map集合的特点:
    1.Map集合的特点都是由键决定的。
    2.Map集合的键是无序,不重复的,无索引的。
        Map集合后面重复的键对应的元素会覆盖前面的整个元素!
    3.Map集合的值无要求。
    4.Map集合的键值对都可以为null。

   HashMap:元素按照键是无序,不重复,无索引,值不做要求。
   LinkedHashMap:元素按照键是有序,不重复,无索引,值不做要求。
   
Map集合的常用API(重点中的重点)
 - public V put(K key, V value):  把指定的键与指定的值添加到Map集合中。
 - public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
 - public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
 - public Set<K> keySet(): 获取Map集合中所有的键,存储到Set集合中。
 - public Set<Map.Entry<K,V>> entrySet(): 获取到Map集合中所有的键值对对象的集合(Set集合)。
 - public boolean containKey(Object key):判断该集合中是否有此键。

目标:Map集合的遍历方式。

Map集合的遍历方式有:3种。
    (1)“键找值”的方式遍历:先获取Map集合全部的键,再根据遍历键找值。
    (2)“键值对”的方式遍历:难度较大。
    (3)JDK 1.8开始之后的新技术:Lambda表达式。(暂时了解)

a.“键找值”的方式遍历Map集合。
    1.先获取Map集合的全部键的Set集合。
    2.遍历键的Set集合,然后通过键找值。
b.“键值对”的方式遍历:
    1.把Map集合转换成一个Set集合:Set<Map.Entry<K, V>> entrySet();
    2.此时键值对元素的类型就确定了,类型是键值对实体类型:Map.Entry<K, V>
    3.接下来就可以用foreach遍历这个Set集合,类型用Map.Entry<K, V>

目标:Map集合存储自定义类型;

Map集合的键和值都可以存储自定义类型。

小结:
    Map集合的键和值都可以存储自定义类型。
    如果希望Map集合认为自定义类型的键对象重复了,必须重写对象的hashCode()和equals()方法

目标:LinkedHashMap的特点介绍。

LinkedHashMap是HashMap的子类。
    -- 添加的元素按照键有序,不重复的。
HashSet集合相当于是HashMap集合的键都不带值。
LinkedHashSet集合相当于是LinkedHashMap集合的键都不带值。

底层原理完全一样,都是基于哈希表按照键存储数据的,
只是HashMap或者LinkedHashMap的键都多一个附属值。


小结:
    HashMap集合是无序不重复的键值对集合。
    LinkedHashMap集合是有序不重复的键值对集合。
    他们都是基于哈希表存储数据,增删改查都很好。

目标:冒泡排序的讲解。

我们之前排序都是调用sun公司写好的API,直接实现排序!
我们现在来自己通过一种比较算法实现排序。编程思想的技术,提高编程能力和理解能力的。

冒泡排序的作用:
    可以用于对数组或者对集合的元素进行大小排序!!

冒泡排序的核心算法思想:
    int[] arr = new int[] {55, 22, 99, 88};
    思想:每次从数组的第一个位置开始两两比较。把较大的元素与较小的元素进行层层交换。
    最终把当前最大的一个元素存入到数组当前的末尾。这就是冒泡思想。


冒泡排序的核心点:每次两两比较找出当前最大值冒出到当前最后面即可!!

冒泡排序的实现核心:
    1.确定总共需要冒几轮: 数组的长度-1.
    2.每轮两两比较几次。
        i(轮数)      次数         每轮次数的规律:数组长度-i-1 次
        0             3
        1             2
        2             1
小结:
        冒泡排序的核心点:每次两两比较找出当前最大值冒出到当前最后面即可!!
        确定总共需要冒几轮: 数组的长度-1.
        每轮两两比较几次。数组长度-i-1 次

目标:选择排序

选择排序的思想:从当前位置开始找出后面的较小值与该位置交换。
数组:int[] arr = {5 , 1 , 3 , 2}

选择排序的实现思路:
    (1)控制选择几轮:数组的长度-1.
    (2)控制每轮从当前位置开始比较几次。

        i(轮数)     次数
        0           3
        1           2
        2           1
小结:
    从当前位置开始找出后面的较小值与该位置交换。
    控制选择几轮:数组的长度-1.
    以当前位置作为基准,从下一个元素开始遍历寻找出较小值与当前位置交换即可!

目标:二分查找

正常查找:从第一个元素开始遍历,一个一个的往后找,综合查找比较耗时。
二分查找:二分查找的前提:对数组是有要求的,数组必须已经排好序。
    每次先与中间的元素进行比较,如果大于往右边找,如果小于往左边找,如果等于就返回该元素索引位置!
    如果没有该元素,返回-1。综合性能比较好!!
小结:
    定义一个方法,记录开始的索引位置和结束的索引位置。
    取出中间索引位置的值,拿元素与中间位置的值进行比较,如果小于中间值,结束位置=中间索引-1.
    取出中间索引位置的值,拿元素与中间位置的值进行比较,如果大于中间值,开始位置=中间索引+1.
    循环正常执行的条件是:开始位置索引<=结束位置索引。 否则说明寻找完毕但是还是没有该元素值返回了-1.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值