文档章节

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

S
 Sunmos
发布于 2017/05/13 00:18
字数 1997
阅读 5
收藏 0

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集合

本文转载自:http://blog.csdn.net/l631106040120/article/details/69055845

共有 人打赏支持
S
粉丝 0
博文 34
码字总数 0
作品 0
成都
kotlin学习笔记-异常好玩的list集合总结

不积跬步无以至千里,不积小流无以成江海 先看看Kotlin中for循环的遍历 kotlin和Java中的集合工具类 Java中集合及其工具类 Kotlin中Java中集合及其工具类 List MutableList Set MutableSet Ma...

codeGoogle
07/16
0
0
JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52724939 JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千! 经过了几...

Aduroidpc
2016/10/02
0
0
Java Collection 【对抗遗忘系列】 - 对Collection不断的梳理

Java2的集合框架,抽其核心,主要有三种:List、Set和Map。如下图所示: 需要注意的是,这里的 Collection、List、Set和Map都是接口(Interface),不是具体的类实现。 List lst = new Array...

止静
2014/09/19
0
1
Java集合框架的知识总结(1)

说明:先从整体介绍了Java集合框架包含的接口和类,然后总结了集合框架中的一些基本知识和关键点,并结合实例进行简单分析。 1、综述 所有集合类都位于java.util包下。集合中只能保存对象(保...

dong.li
2012/04/24
0
0
[Java 并发编程] 集合框架之 同步容器类 & 并发容器类

吾生也有涯,而知也无涯。———《庄子》 通过上一篇文章,我们已经知道设计一个线程安全类的原则和步骤,以及在设计过程中我们应当注意的细节。实际上,Java 的集合库包含了线程安全集合和非...

seaicelin
05/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

arts-week10

Algorithm 905. Sort Array By Parity - LeetCode Review Who’s Afraid of the Big Bad Preloader? 一文读懂前端缓存 一个网络请求3个步骤:请求,处理,响应,而前端缓存主要在请求处响应这两步...

yysue
50分钟前
0
0
00.编译OpenJDK-8u40的整个过程

前言 历经2天的折腾总算把OpenJDK给编译成功了,要说为啥搞这个,还得从面试说起,最近出去面试经常被问到JVM的相关东西,总感觉自己以前学的太浅薄,所以回来就打算深入学习,目标把《深入理...

凌晨一点
今天
4
0
python: 一些关于元组的碎碎念

初始化元组的时候,尤其是元组里面只有一个元素的时候,会出现一些很蛋疼的情况: def checkContentAndType(obj): print(obj) print(type(obj))if __name__=="__main__": tu...

Oh_really
昨天
6
2
jvm crash分析工具

介绍一款非常好用的jvm crash分析工具,当jvm挂掉时,会产生hs_err_pid.log。里面记录了jvm当时的运行状态以及错误信息,但是内容量比较庞大,不好分析。所以我们要借助工具来帮我们。 Cras...

xpbob
昨天
126
0
Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用...

飞扬青云
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部