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

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#多线程(4):进程同步Mutex类

    Mutex 类 构造函数和方法 系统只能运行一个程序的实例 解释一下上面的示例 接替运行 进程同步示例 另外 Mutex 类 Mutex 中文为互斥,Mutex 类叫做互斥锁.它还可用于进程间同步的同 ...

  2. AJ学IOS(11)UI之图片自动轮播

    AJ分享,必须精品 先看效果 代码 #import "NYViewController.h" #define kImageCount 5 @interface NYViewCont ...

  3. Linux protobuf

    生成C# protobuf 最终文件Net.cs .protoc --descriptor_set_out=a.protobin a.proto .mono protogen.exe -i:Net.p ...

  4. test_HTMLTestRunnerCN.py

    代码如下: from calculator import Count import unittest import HTMLTestRunnerCN #测试两个整数相加 class TestAdd(u ...

  5. 数据结构(C语言版)---二叉树

    1.二叉树:任意一个结点的子结点个数最多两个,且子结点的位置不可更改,二叉树的子树有左右之分. 1)分类:(1)一般二叉树(2)满二叉树:在不增加树的层数的前提下,无法再多添加一个结点的二叉树就是满二 ...

  6. TVP专家眼中的云开发:定是未来,尚不完美

    TVP专家眼中的云开发:定是未来,尚不完美 C++之父 Bjarne曾说,"世界上只有两种编程语言,一种被人骂,一种没人用".这句玩笑话道出了软件开发行业的真谛,不怕被人吐槽,就怕 ...

  7. Task Scheduler Error Message: 80041318

    Using the error lookup tool that comes with VC++ (errlook.exe, or "Error Lookup" on the To ...

  8. Vue Router路由守卫妙用:异步获取数据成功后再进行路由跳转并传递数据,失败则不进行跳转

    问题引入 试想这样一个业务场景: 在用户输入数据,点击提交按钮后,这时发起了ajax请求,如果请求成功, 则跳转到详情页面并展示详情数据,失败则不跳转到详情页面,只是在当前页面给出错误消息. 难点所在 ...

  9. 使用Hexo框架搭建博客,并部署到github上

    开发背景:年后回来公司业务不忙,闲暇时间了解一下node的使用场景,一篇文章吸引了我15个Nodejs应用场景,然后就被这个hexo框架吸引了,说时迟,那时快,赶紧动手搭建起来,网上找了好多资料一天时 ...

  10. IBM:向所有云平台开放Watson人工智能系统

    据美国科技媒体TechCrunch报道,IBM今天宣布不再把沃森(Watson)品牌的人工智能服务局限于自家云计算服务,而是会允许其他企业在自己的数据中心里使用和运行这个平台."客户很难把人 ...