文档章节

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

S
 Sunmos
发布于 2017/05/13 00:18
字数 1997
阅读 4
收藏 0
点赞 0
评论 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
成都
[Java 并发编程] 集合框架之 同步容器类 & 并发容器类

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

seaicelin ⋅ 05/25 ⋅ 0

Java面试2018常考题目汇总及答案带走不谢!

一、JAVA基础篇-概念 1.简述你所知道的Linux: Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是主流的服务器操作系统, 广泛应用于互联网、云计算、智能手机(Android)等...

java高级架构牛人 ⋅ 06/14 ⋅ 0

Java编程学习:集合框架详解

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/30 ⋅ 0

随机模拟 java 数据插件 - Jmockdata

Jmockdata ![License](http://www.apache.o

寻觅一只耳朵 ⋅ 2017/01/05 ⋅ 20

Java编程基础知识点和技术点归纳

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/23 ⋅ 0

【目录导航】JAVA零基础进阶之路

【JAVA零基础入门系列】(已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day6 Java字符串 Day7 Java输入与输出...

MFrank ⋅ 06/21 ⋅ 0

【Java集合基础篇一】——Java集合总览

前言 Java集合和数组不一样,数组中可以保存基本数据类型和对象,而集合只能保存对象,主要包括了Collection接口和Map接口,其中Collection中包括了Set,Queue,List三种接口,这三种接口是具体...

changyinling520 ⋅ 05/27 ⋅ 0

2018学习计划——Java基础之集合

Java——集合 前言 相信做开发的老铁们,不管你是做Java、Android、还是其他的语言,我相信很多都遇到过集合这个名词,而且我相信很多的老铁在进行大公司面试的时候,一定不可避免的会被问到...

Ray丶Cxy ⋅ 05/10 ⋅ 0

java集合入门和深入学习,看这篇就差不多了

集合框架: Java中的集合框架大类可分为Collection和Map;两者的区别: Collection是单列集合;Map是双列集合 Collection中只有Set系列要求元素唯一;Map中键需要唯一,值可以重复 Collecti...

sihailoveyan ⋅ 05/04 ⋅ 0

【java8】java新特性(二)——lambda表达式

一,前言 在上一篇博客中,小编向大家抛转引玉,简单说明了[ Java8 ](http://blog.csdn.net/kisscatforever/article/details/79572194 ),其实Java 8在2014年3月18日,就发布了。可以说程序...

kisscatforever ⋅ 03/20 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 今天 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 今天 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 今天 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部