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

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. [科普向] Roguelike游戏到底是什么?

    简单的说 Roguelike 是 RPG(角色扮演游戏)的一个分支,也是最重要的一个分支.这个名字源于 1980 年发布的著名电子游戏<Rogue>.按字面上理解,Roguelike 就是 ...

  2. 怎么快速学python?酒店女服务员一周内学会Python,一年后成为程序员

    怎么快速学python?有人说,太难!但这个女生却在一个星期内入门Python,一个月掌握python所有的基础知识点. 说出来你应该不信,刚大学毕业的女生:琳,一边在酒店打工,一边自学python, ...

  3. A Bug's Life POJ 2492

    D - A Bug's Life 二分图 并查集 BackgroundProfessor Hopper is researching the sexual behavior of a rare spe ...

  4. eclipse git 文件状态 及git分支的创建与合并与删除

    eclipse里面Git文件状态及图标展示   EGit会出现如下图标,其对应状态及意义如下:      1)忽略[ ignored ]:仓库认为该文件不存在(如bin目录,不需要关注).通过右键Te ...

  5. python 工具链 多版本管理工具 pyenv

    理解Shims pyenv会在系统的PATH最前面插入一个shims目录: $(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin 通过一个rehashing ...

  6. 来自BAT大厂前端工程师的自白-怎么才能学好前端

    如果说理解学好web前端是先能找到一份工作,那么你应该这样做: 1.制定好一下系统的web前端学习规划,每天定量,学完什么知识点就掌握,能自己应用,而不是能看懂,写不出来东西. 2.不要自己一个人闷头 ...

  7. linux下文件的打包和压缩

    文章来源:linux下文件的打包和压缩 目录 一.文件压缩的原理 二.linux常见的压缩指令 三.常用实例 1.tar命令 2.zip命令 3.gz命令 4.bz2命令 5.xz命令(必须分两步) ...

  8. DDOS攻击攻击种类和原理

    DoS攻击.DDoS攻击和DRDoS攻击相信大家已经早有耳闻了吧!DoS是Denial of Service的简写,就是拒绝服务,而DDoS就是Distributed Denial of Servic ...

  9. 理解分布式一致性:Raft协议

    理解分布式一致性:Raft协议 什么是分布式一致性 Leader选举 日志复制流程 term选举周期 timeout 选举和选举timeout 选举分裂 日志复制和心跳timeout 在分布式系统中, ...

  10. docker中安装nginx,部署前端代码

    最近在学习docker,初次接触,难免遇到磕磕碰碰,遂将其整理成博客,以便日后查看. 1.拉取nginx镜像 直接从官方镜像库拉取简单粗暴: docker pull nginx 2.运行 docker ...