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

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. AJ学IOS 之微博项目实战(11)发送微博自定义TextView实现带占位文字

    AJ分享,必须精品 一:效果 二:代码: 由于系统自带的UITextField:和UITextView:不能满足我们的需求,所以我们需要自己设计一个. UITextField: 1.文字永远是一行,不 ...

  2. matlab创建HDF5文件

    一.例子 1.创建写入 testdata = uint8(magic(5)); h5create('my_example.h5','/dataset1',size(testdata)); %创建 h5 ...

  3. matlab计算LZ复杂度

    我这个计算得14通道,每个通道截取3000个数据得复杂度,最后将计算得出得数据存储到本地txt文档中 function LZC(data) % 计算一维信号的复杂度 % data时间序列 % lzc: ...

  4. 植物大战僵尸的代码如何使用python来实现

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

  5. Git敏捷开发--stash命令

    save 执行git stash,默认以commit info保存当前的stash信息 当在某个commit下,执行多次stash时,无法友好地区分每个stash的改动.save 命令可以清晰地标识每 ...

  6. 4. git log的常见用法

    git log ======见https://blog.csdn.net/daguanjia11/article/details/73823617 +++++++++++++++++++++++ 使用 ...

  7. Xss Game挑战

    前言 最新学习了下xss的更深入的东西,学习了一波浏览器解析机制和XSS向量编码的知识. 这里就些xss的练习题巩固知识 学习的话结合如下两篇文章看,从例子和基础原理层面都有: http://boba ...

  8. 异常处理方式一(try-catch-finally)

    package com.yhqtv.demo01Exception; /* * 一.异常的处理,抓抛模型 * * 过程一:“抛”:程序在正常 执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异 ...

  9. numpy+sklearn 手动实现逻辑回归【Python】

    逻辑回归损失函数: from sklearn.datasets import load_iris,make_classification from sklearn.model_selection im ...

  10. GC日志分析详解

    点击返回上层目录 原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 GC日志分析详解 以ParallelGC为例,YoungGC日志解释如下 ...