文档章节

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
面试必备:30个Java集合面试问题及答案

Java集合框架为Java编程语言的基础,也是Java面试中很重要的一个知识点。这里,我列出了一些关于Java集合的重要问题和答案。 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中...

jamesese
08/21
0
0
Java集合框架的知识总结(1)

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

dong.li
2012/04/24
0
0
Java Collection 【对抗遗忘系列】 - 对Collection不断的梳理

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

止静
2014/09/19
0
1
JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千!

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

Aduroidpc
2016/10/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

开源软件会被云杀死吗 ?

本文转载云头条,原作者:Michael Stiefel是Reliable Software公司的负责人,是一名软件架构和开发顾问。 文章要点 虽然开源开发不会消失,但商业开源厂商的未来不是很有希望。随着全面管理的...

linuxCool
23分钟前
0
0
OSChina 周三乱弹 —— 谈什么对象?睡什么觉?

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @胖达panda :最肯忘却古人诗,最不屑一顾是相思。分享童丽的单曲《红豆生南国》: 《红豆生南国》- 童丽 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
27分钟前
43
3
stylus

stylus基础教程,stylus实例教程,stylus语法总结

miaojiangmin
今天
3
0
PHP生成CSV之内部换行

当我们使用PHP将采集到的文件内容保存到csv文件时,往往需要将采集内容进行二次过滤处理才能得到需要的内容。比如网页中的换行符,空格符等等。 对于空格等处理起来都比较简单,这里我们单独...

豆花饭烧土豆
今天
2
0
使用 mjml 生成 thymeleaf 邮件框架模板

发邮件算是系统开发的一个基本需求了,不过搞邮件模板实在是件恶心事,估计搞过的同仁都有体会。 得支持多种客户端 支持响应式 疼彻心扉的 outlook 多数客户端只支持 inline 形式的 css 布局...

郁也风
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部