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

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. C语言冒泡排序法分析及代码实现

    冒泡排序法: 所谓冒泡排序法,就是对一组数字进行从大到小或者从小到大排序的一种算法.具体方法是,相邻数值两两交换.从第一个数值开始,如果相邻两个数的排列顺序与我们的期望不同,则将两个数的位置进行交换( ...

  2. webWMS开发过程记录(六)- 详细设计之系统管理

    一.功能说明 1. 权限管理 (参考“权限管理-百度百科") 定义:一般指根据系统设置的安全规则或安全策略,用户可以访问而且只能访问自己被授权的资源,不多不少. 分类:从控制力度来看,通常分 ...

  3. Docker搭建Nessus pro笔记

    0x01 准备Docker环境 拉取镜像: docker pull ubuntu 创建容器: docker run -p 9922:22 -p 8834:8834 --name nessus -it ...

  4. 官方解读:Salesforce线上考试新政与福利

    随着疫情在世界范围内的迅速蔓延,Salesforce推出了一系列的线上认证考试改进方案,方便Salesforce从业者在疫情阶段也能够安全.便利地参与考试,今天让我们一起来捋一捋那些,和我们密切相关的 ...

  5. I. 蚂蚁上树

    蚂蚁上树(Sauteed Vermicelli with minced Pork),又名肉末粉条,是四川省及重庆市的特色传统名菜之一.因肉末贴在粉丝上,形似蚂蚁爬在树枝上而得名.这道菜具体的历史,已不 ...

  6. 自己写的一个HTML的小网页

    上次在上直播课的时候,教员提到了html这种标记语言.自己就在W3school上面学了一点点关于html的一些皮毛,自己动手写了一个小网页,同时自己对CTF这一块比较感兴趣,但是自己还是一个干干净净的 ...

  7. 重装anaconda的记录,包含设置jupyter kernel

    anaconda安装记录 官网下载最新版 linux:sh xx.sh 注意不要敲太多回车,容易错过配置bash的部分,还要手动添加 (vim ~/.bashrc 手动添加新bash,卸载时也要删掉此 ...

  8. 一年时间,Pipenv就成为Python官方推荐的顶级工具?

    Pipenv是Kenneth Reitz在一年多前创建的“面向程序员的Python开发工作流程”,现在已成为管理软件包依赖关系的Python官方推荐资源. Python软件包安装管理的简要历史 为了正 ...

  9. Java中集合的初等案例

    我有五个学生,请把这个学生的信息储存到数组中,并遍历数组,获取得到每一个学生信息. 学生:Strdent 成员变量:name,age 构造方法:无参,带参 成员方法:getXxx()/setXxx() ...

  10. pytorch seq2seq闲聊机器人

    cut_sentence.py """ 实现句子的分词 注意点: 1. 实现单个字分词 2. 实现按照词语分词 2.1 加载词典 3. 使用停用词 "" ...