再最前面分享一下我再学习集合时的方法:

1.首先了解各集合的定义和特点

2.集合的构造方法和常用方法(增删改查等)

3.了解集合使用的场景,再什么情况下使用什么类型的集合(关键是集合的特性)

4.了解集合底层的数据结构和底层实现

5.自己尝试着去封装集合类工具

仅仅知道集合的使用是远远不够的,如果要想进一步提高必须知道底层原理,自己动手实现。


1 集合的定义与数组的比较

所谓集合是指具有某种特定属性的具体或抽象的对象汇总而成的集体,在Java开发当中,集合的使用是非常重要的。传统的数组也是存储具有相同属性的一组对象,但数组的缺点是一旦定义长度就固定不能再改变了,但集合定义后长度却能动态改变,使用时更加方便灵活。


2 Java集合的简单介绍

java中的集合有两个分支,分别是Collection和Map(注意这两个都是接口),其中Collection存储的是value值,而Map存储的是key-value键值对。两者根据存储的特性不同使用的场合也不同。


3 Collection接口分支(List和Set)

Collection存储的是value值,而value值的存储也是有不同的特点,根据value值是否有序和是否可重复也分为List和Set两个大分支。

List的简单介绍

List存储的value值是有序可重复的。这里指的有序是指我们存入集合的元素顺序与取出集合中元素的顺序是相同的,可重复是指集合中存入的value值是可以相同的。而再List中根据底层实现所用数据结构的不同又可分为ArrayList和LinkedList。

  • ArrayList的底层是用数组实现的,采用数组动态扩容的方法来改变容量,它的优点是能随机存取快速查询,时间复杂度是O(1);缺点就是插入和删除极不方便,要移动大量的元素特别慢,时间复杂度是O(n);
  • LinkedList的底层是用双向链表来实现的,它的特点刚好和ArrayList的特点相反,它的优点是插入和删除比较快,直接改变链表的指向即可,时间复杂度是O(1),但缺点是查找时必须从头节点开始,速度慢,时间复杂度是O(n);

根据实际的问题,如果涉及到的只是简单的查找,用ArrayList集合更佳,如果涉及到大量的插入和删除,则用LinkedList更佳。

Set的简单介绍

Set存储的value值是无序无重复的。这里指的无序是指我们存入集合的元素顺序与取出集合中元素的顺序是不同的,但对Set自己本身内部来说存储是有序的(可能是用hash或tree算法来存储,只是我们不知道具体的方法),无重复是指集合中存入的value值是不可以相同。而再Set中根据底层实现所用数据结构的不同又可分为HashSet和TreeSet。

  • HashSet的底层是用hash算法来实现的,采用的是散列表(数组+链表)的结构来存储数据元素,里面存储的元素是无序的(查看源代码会发现是用到了HashMap),获取元素与存入元素的顺序是不同的,实现无重复是根据hashCOde()equial()这两个方法的共同的返回值是否一样来确定的,如果没有重写这两个方法默认继承Object父类的方法,要想自己实现无重复的规则可以自己重写这两个方法。
  • TreeSet的底层是用红黑二叉树的结构来实现的,里面存储的元素是无序的(查看源代码会发现是用到了TreeMap),获取元素与存入元素的顺序是不同的。特别注意的是不能直接往TreeSet中放入数据,不然会报错,因为这个集合的无重复需要用到campareTo()方法,而默认继承的Object父类中没有该方法,所以必须实现Camparable接口。

4 Map的简单介绍

Map存储的是key-value键值对,其中key是无序无重复的(前面已经提到Set的无序底层是Map的无序实现的),value是无序可重复的。Map根据底层采用的不同的数据结构实现分为HashMap和TreeMap。

  • HashMap是用散列表实现的,通过散列函数算出元素Key的散列值,再在算出的散列值对应的链表中看是否有相同的key,没有则把元素存入,有则不存。
  • TreeMap底层是用红黑二叉树的结构来实现的,存入元素是看树中是否有相同的key,没有则把元素存入,有则不存。

在实际问题中,如果采用的是键值对的方式用Map集合能快速的执行各种操作。

5 各种集合的构造方法和常用方法(增删改查等)

https://www.oracle.com/java/technologies/javase-downloads.html

Java的API文档连接,按着文档学习常用的集合方法。

6 自己动手试着封装集合工具

Java集合简单介绍的更多相关文章

  1. Java NIO简单介绍(二)

    上一篇<NIO简单介绍(一)>中讲解了NIO中本地IO相关的内容,这篇重点介绍的NIO的非阻塞式网络通信 一.阻塞与非阻塞 传统的 IO 流都是阻塞式的.也就是说,当一个线程调用 read ...

  2. java多线程(简单介绍)

    简单介绍 线程是程序运行的基本执行单元.当操作系统(不包括单线程的操作系统,如微软早期的DOS)在执行一个程序时,会在系统中建立一个进程,而在这个进程中,必须至少建立一个线程(这个线程被称为主线程)来 ...

  3. Java集合 - List介绍及源码解析

    (源码版本为 JDK 8) 集合类在java.util包中,类型大体可以分为3种:Set.List.Map. JAVA 集合关系(简图) (图片来源网络) List集合和Set集合都是继承Collec ...

  4. Java集合框架介绍。Java Collection Frameworks = JCF

    Java集合框架 = Java Collection Frameworks  = JCF . 为了方便理解,我画了一张思维脑图.

  5. JAVA NIO 简单介绍

    Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00918492 一:为什么要使用NIO技术        ...

  6. Java集合的介绍

    参考博客: https://blog.csdn.net/zhangqunshuai/article/details/80660974 List , Set, Map都是接口,前两个继承至Collect ...

  7. java~集合的介绍和使用

    大叔转载,原文地址:http://www.700net.com/rewrite.php/read-4491.html 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了 ...

  8. Java Bean 简单介绍及其应用

    Bean的中文含义是"豆子",顾名思义JavaBean是一段Java小程序.JavaBean实际上是指一种特殊的Java类.它通经常使用来实现一些比較经常使用的简单功能.并能够非常 ...

  9. Java集合简单解析

    一. Collection 1. List a. ArrayList b. Vector c. LinkedList 首先要对List的三种实现进行一个简单的异同比较: 同: *ArrayList和V ...

随机推荐

  1. Scanner的小细节

    Scanner对象是用来接收键盘输入的数据的,可以接收字符串,数字,浮点数,大数等多种数据. Scanner scanner = new Scanner(System.in); System.out. ...

  2. 使用 Chrome 插件 Vimium 打造黑客浏览器

    之前一直用 cVim,与 Vimium 功能类似,但是之后不在更新了,故转战到 Vimium. 简介 官网:http://vimium.github.io/ Vimium 是 Google Chrom ...

  3. 【three.js第五课】光线的添加和感光材料

    材料分类: MeshBasicMaterial:基础网孔材料,一个以简单着色(平面或线框)方式来绘制几何形状的材料.MeshLambertMaterial:兰伯特网孔材料,一种非发光材料(兰伯特)的表 ...

  4. 小说免费看!python爬虫框架scrapy 爬取纵横网

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 风,又奈何 PS:如有需要Python学习资料的小伙伴可以加点击下方 ...

  5. poi导出word文档,doc和docx

    maven <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency> <gro ...

  6. 3. git获取历史版本

    1.使用gitbash进入git命令行,查看commit记录.操作如下: git log 1 2.找到你想提取的目标版本,复制对应的SHA值. 3.新建一个分支,操作如下: git branch 新分 ...

  7. WEBMIN(CVE-2019-15107) 学习

    简单介绍: Webmin是目前功能最强大的基于Web的Unix系统管理工具.管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作.目前Webmin支持绝大多数的Unix系统,这些系统除了 ...

  8. Tensorflow 模型线上部署

    获取源码,请移步笔者的github: tensorflow-serving-tutorial 由于python的灵活性和完备的生态库,使得其成为实现.验证ML算法的不二之选.但是工业界要将模型部署到生 ...

  9. 实现Nginx Upload 模块 功能上传文件。

    分析(也许我表达的让人难以理解,但是我想说一句,直接实践是最好的.....): 一.Ningx 上传( 1.安装Nginx 的模块文件(upload):https://www.nginx.com/re ...

  10. Java 基础之详解 Java IO

    Java IO基本概念 Java IO:即Java输入/输出系统,区分Java的输入和输出:把自己当成程序, 当你从外边读数据到自己这里就用输入(InputStream/Reader), 向外边写数据 ...