Java基础进阶_day09_(Collection集合和Map集合总结)

Java基础进阶_day09_(Collection集合和Map集合总结)

1. Collection集合总结

# Collection集合内容总结:
   * |--List集合:元素有序(指存储顺序),元素可重复,有索引值
        List集合中的有些方法(contains和remove)底层是是使用equals方法进行判断两个元素是否相等,
        则自定义对象需要重写equals方法,在equals方法中定义两个自定义对象是否相同的规则.
        |--ArrayList集合:
            底层数据结构是数组,查询快,增删慢,线程不安全,效率高
        |--Vector集合:
            底层数据结构是数组,查询快,增删慢,线程安全,效率低
        |--LinkedList集合:
            底层数据结构是链表,查询慢,增删快,线程不安全,效率高
    |--Set集合:元素无序,元素唯一,无索引值
        |--HastSet集合:本质是HashMap集合
            底层数据结构是哈希表(哈希表是元素为链表的数组),查询快,增删快
            保证元素的唯一性:
                依赖hashCode和equals方法,元素对象所属类必须实现这两个方法.
            |--LinkedHashSet集合:
                    底层数据结构是链表和哈希表
                    链表保证元素的有序(存取顺序一致)
                    哈希表保证元素的唯一性(元素所属的类必须实现hashCode和equals方法)
        |--TreeSet集合:本质是实现了NavigableSet(接口)的TreeMap类
            底层数据结构是红黑树(自平衡的二叉树)
            保证元素排序:
                自然排序:使用TreeSet集合的无参构造方法
                    元素对象所属的类必须实现Comparable接口,实现compareTo方法,在该方法中定义排序的规则.
                比较器排序:使用TreeSet集合的有参构造方法,参数是实现Comparator接口的子类
                    元素对象不需实现Comparable接口,将实现Comparator接口compare方法中的匿名子类对象作为创建集合时的参数
                    在Comparator接口匿名对象compare方法中定义排序规则.
            保证元素的唯一性:
                集合对象添加元素时结合元素排序的方式,判断集合中是否包含该元素,如果包含就不添加进集合.

2.Map集合总结

# Map集合总结:(总结HashMap和TreeMap)
    Map集合:是双列集合的顶层接口,键唯一,值可重复(底层数据结构只针对键有效,对值无效)
        |--HashMap集合:无序(存取顺序),键唯一,值可重复
            底层数据结构是哈希表,保证键的唯一性
            当键是自定义数据类型时,该自定义对象的类的需要重写hashCode和equals方法以保证键的唯一性
            |--LinkedHashMap集合:有序(存取顺序),键唯一,值可重复
                底层数据机构是链表和哈希表结构
                链表保证元素存取有序
                哈希表保证键唯一(当键是自定义对象时,自定义对象所属的类需重写hashCode和equals方法)
        |--TreeMap集合:键有序键值对有序),键唯一,值可重复
            键的底层数据结构是红黑树(自平衡二叉树),保证键的唯一和有序
            键的排序:
                自然排序:
                    当键是自定义对象时,该对象所属的类需实现Comparable接口,重写compareTo方法,在该方法中定义排序规则
                比较器排序:
                    当键是自定义对象时,该对象所属类不需实现Comparable接口,
                    只需要在创建集合对象时将实现Comparator接口的匿名子类对象(匿名子类对象重写compare方法,定义排序规则)作为参数;
                    当自定义对象实现了Comparable接口,且在创建集合对象时也传入Comparator接口的比较器,则优先使用比较器定义的排序规则.

3.Collection集合和Map集合的区别

# Map集合与Collection集合区别:
    Map集合:双列集合的顶层接口,存储的元素时键值对,键是唯一的,键映射的值可以重复;
    Collection集合:单列集合顶层接口,存储的是单值元素,其子接口Set元素唯一,子接口List的元素可重复.

4.Collection集合Map集合的底层数据结构特点

# 集合类底层使用的数据结构及特点:
    |--Collection集合:单列集合(底层数据结构针对存储的元素有效)
        |--数组结构:ArrayList,Vector
            数据查询快,增删慢
        |--链表结构:LinkedList
            数据查询慢,增删快
        |--哈希表:HashSet
            保证数据唯一性,依赖于hashCode和equals方法
        |--二叉树:TreeSet
            自然排序:依赖Comparable接口
            比较器排序:依赖Comparator接口
        |--哈希表和链表:LinkedHashSet
            哈希表保证数据的唯一性
            链表保证数据有序(存取顺序相同)
    |--Map集合:双列集合(底层数据是针对键,对值无效)
        |--哈希表:HashMap
            保证键的唯一性,哈希表依赖键的元素的hashCode和equals方法
        |--哈希表和链表:LinkedHashMap
            哈希表保证键的唯一性(依赖键的元素的hashCode和equals方法)
            链表保证键值对有序(存取顺序)
        |--二叉树:TreeMap
            自然排序:依赖Comparable接口
            比较器排序:依赖Comparator接口

5.Collection集合和Map集合的元素遍历方式

# 集合元素遍历方法:
  |--Collection集合元素遍历:
      |--List集合:ArrayList,Vector,LinkedList
          1.普通for循环遍历(有索引)
          2.增强for循环遍历:需要注意集合元素的并发修改异常
          3.迭代器遍历
              Iterator遍历:需要注意集合元素的并发修改异常
              ListIterator遍历:遍历数据的同时可以使用迭代器对象修改集合中的元素
          4.将集合元素转换为对象数组,再使用for循环遍历
      |--Set集合:HsahSet,TreeSet
          1.增强for循环遍历
          2.迭代器遍历(只有Iterator方式):需要注意集合元素的并发修改异常
          3.将集合元素转换为对象数组,再使用for循环遍历
  |--Map集合元素遍历:
      1.通过集合的keySet()方法获取键的集合,然后遍历键的集合再获取每个键对应的值
      2.通过集合的entrySet()方法获取键值对的集合,遍历集合,获取每个键和值

6.Collection集合和Map集合选用原则

# Collection集合和Map集合的选用原则:根据使用的需求选择
* 键值对需求:
    |--是:Map集合,是双列集合的顶层接口,键唯一,值可重复(底层数据结构只针对键有效,对值无效)
        |--键排序需求:
            |--是:TreeMap集合,键有序,值可重复
                排序方式:
                    自然排序:使用TreeMap集合的无参构造创建集合对象
                        自定义对象所属的类需实现Comparable接口中的compareTo方法,在该方法中定义排序规则;
                    比较器排序:使用TreeMap集合的有参构造方法(参数是实现Comparator接口的匿名子类对象)
                        自定义对象所属类可以不实现Comparable接口和定义排序规则,创建集合对象时的参数是实现Comparator接口的匿名子类对象,
                        该匿名对象需重写compare方法,在该方法中定义排序规则
            |--否:HashMap集合,元素无序(存取顺序),键唯一,值可重复
                当键是自定义对象时,该对象所属的类需要重写hashCode和equals方法,在equals方法中定义对象相同的规则.
    |--否:Collection集合选用:根据需求选择集合类,一般使用ArrayList集合
        |--元素唯一性需求:
            |--是:Set集合,一般使用HashSet集合
                |--排序需求:
                    |--是:TreeSet集合
                    |--否:HashSet集合
            |--否:List集合,一般使用ArrayList集合
                |--安全需求:
                    |--是:Vector集合
                    |--否:ArrayList或LinkedList集合
                        |--查询操作多:
                            ArrayList集合
                        |--增删操作多:
                            LinkedList集合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值