关闭

java集合介绍

标签: 集合ListList之间的区别LinkedList介绍java基础ArrayList介绍
526人阅读 评论(0) 收藏 举报
分类:

对于高级语言来说,集合(容器)是非常的重要的知识点,也是非常基础的,相信很多刚毕业的同学包括初级程序员和求职的过程中,经常会被问到集合相关的知识。我觉得该文只是对集合的一个简单的介绍,更加深的学习还是要大家查找一些资料去学习。

    场景1(自己经历过的):

谈谈你对集合的理解?(已经开始挖坑了!)

霹雳哗啦的说完自己当时所懂的!

说一下List、set、map的区别?

---------------------

聊一下ArrayList和LinkedList的区别和实现原理?

---------------------

hashMap用过吧,说一下它的实现原理吧!

--------------------

对于科班(计算机)的同学对这些应该是很了解 --> 《数据结构与算法导论》,而对于许多非科班培训出来的,我觉得可能对这些知识有些缺失。不过这都不是事,无非就是花时间。

下面是我对集合的一些理解(比较基础)。

容器分类:

首先我建议大家去看一看java编程思想这本书17章中完整的容器分类图,能够学到很多。下图是自我理解画出的分类图,比较简单且是较常用的(其中有一些接口省略掉了)。


通过上图可以看出,Collection是最基本的集合接口,子接口有List、Map、Set、Queue,它支持Iterator,具有一个Iterator()方法。具体还定义了什么方法可可以去看一看它的源码。

List接口:List接口继承Collection接口,因此它也包含了Collection接口的所有办法(isEmpty、clear、add等等),外加自己的一些方法。下图是List接口的代码。ListIterator()方法应该是实现遍历功能,我记得具有ListIterator()方法就可以使用foreach遍历元素。记得不是很清楚了。

	public interface List<Anytype> extends Collection<Anytype>{
		
		Anytype get(int idx);
		Anytype set(int idx, Anytype newVal);
		void add(int idx, Anytype x);
		void remove(int idx);
		
		ListIterator<Anytype> listIterator(int pos);
	}

上面的方法我就不再说了。List接口有两种流行的实现方式。ArrayList类是一种可增长数组的实现。LinkedList类是一种双链表的实现。

在介绍ArrayList类和LinkedList之前我觉得应该介绍一下数组和链表。

数组:数组是一个简单的线性序列,存储区间是连续的,占用内存严重,故空间复杂度很大。但数组的二分查找时间复杂度小,为O(logn);特点:访问元素快,插入和删除慢。

链表:链表是由一系列节点组成(存储区间离散,占用内存宽松。但是查找元素时,时间复杂度大,为O(N))。每个节点含有一个结构体(元素)和指向下一个节点的链(可以理解为下标),最后一个单元的存储的节点的链则是null。双向链表中节点存储的则是一个结构体、一个指向下个节点的链和一个指向上一个节点的链。


ArrayList类:ArrayList的优势在于访问元素快,因为它提供了像数组一样的下标,缺点就是在进行中间插入和移除元素时会比较慢(原因是因为当删除某中间元素时,后面项的坐标全部要发生改变。)。 有兴趣的建议去看一看它的源码!

LinkedList类:LinkedList的优点是新项的插入和现有项的删除非常快(当LinkedList删除某一元素时发生改变的只有上一个节点指向下一个节点的链和下一个节点指向上一个节点的链),缺点就是访问元素较慢。

Vector类:Vector和ArrayList一样是通过数组实现的,所以它的优缺点可以参照ArrayList,访问元素速度较ArrayList慢,这也是重要的一个不同点即Vector支持线程同步,所以花费的时间长一些。提一下Stack集合吧,后进先出的特点。

在介绍Set和Map时它们的实现类HashSet和HashMap需要一些Tree的知识,例如红黑树的与原理,这个在之前的推荐"数据结构"方面会介绍,还需要一些散列的知识。下面是我看过的一篇关于hashcode方法的介绍

https://www.cnblogs.com/dolphin0520/p/3681042.html

Set接口:不保存重复的元素这是Set的一个重点。Set具有和Collection完全一样的接口,没有新增任何新的功能。

Map接口:Map(映射表)的基本思想是维护键值对关联即通过Key来查找value。实现Map接口的常用类我们这里只提HashMap和TreeMap。

常常会有人将HashMap和HashSet来比较,我觉得放在一起比较更方便理解吧,在理解HashSet时,需较好的理解HashMap。

HashMap实质:

HashMap中的两个非常重要的方法,HashCode()方法和Equals()。推荐大家去看下面这篇博客。再去看下面的知识。

http://blog.csdn.net/lizhuchao88/article/details/64123459

HashSet实质

1)HashSet是set的一个实体类,hashMap是Map的一个实现类,同时hashMap是hashTable的替代品。

2)HashSet以对象作为元素,而HashMap以(key-value)的一组对象作为元素,且HashSet拒绝接受重复的对象。HashMap可以看做三个视图:Key的Set,Value的Collection,Entry的Set。这里HashSet就是HashMapde 一个视图。

HashSet内部就是使用HashMap实现的,和HashMap不同的是它不需要Key和Value的值。

同样的我们将TreeMap和TreeSet一起介绍,很多人所TreeSet是TreeMap的另一个马甲,TreeSet通过封装HashMap的成员变量来实现。下面是详细介绍

http://blog.csdn.net/u010366748/article/details/52021600




0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Java集合详细介绍及原理

Java集合详细介绍及原理 Collection(单列集合) List(有序,可重复) ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector 底层数据...
  • u010788587
  • u010788587
  • 2015-01-25 21:06
  • 1714

【集合】Java集合框架介绍

文章来源:http://blog.csdn.net/ylyg050518/article/details/48683303 集合框架介绍   Java集合工具包位于Java.util包下,...
  • Spixii
  • Spixii
  • 2016-09-02 08:27
  • 2297

Java中的集合功能整理

网上对集合的功能介绍有很多,也很详细。我在这里只能是对常用的几个集合类进行功能的简单梳理。小白一个。这里主要参考孙宇霞、王健编著的《Java编程从基础到应用》。内容仅供学习交流。 1.选择合适的集合...
  • nishuihanliu
  • nishuihanliu
  • 2016-05-01 22:02
  • 1836

java集合的介绍很全

  • 2011-09-05 22:53
  • 6KB
  • 下载

Java集合类的详细介绍

  • 2008-09-19 13:05
  • 8KB
  • 下载

Java 集合系列07之 Stack详细介绍(源码解析)和使用示例

概要 学完Vector了之后,接下来我们开始学习Stack。Stack很简单,它继承于Vector。学习方式还是和之前一样,先对Stack有个整体认识,然后再学习它的源码;最后再通过实例来学会使...
  • duolaamengle
  • duolaamengle
  • 2018-01-12 15:01
  • 9

Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例

概要  前面,我们已经学习了ArrayList,并了解了fail-fast机制。这一章我们接着学习List的实现类——LinkedList。 和学习ArrayList一样,接下来呢,我们先对L...
  • duolaamengle
  • duolaamengle
  • 2018-01-12 14:59
  • 72

java集合系列——Set之HashSet和TreeSet介绍(十)

Set是一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素。对 e1 和 e2,并且最多包含一个为 null 的元素。
  • u010648555
  • u010648555
  • 2017-03-06 11:59
  • 849

Java集合框架List,Map,Set等全面介绍

Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构。   Java集合框架的基本接口/类层次结构: ja...
  • weiqubo
  • weiqubo
  • 2013-07-18 10:37
  • 1095

java集合系列——Map之HashMap介绍(八)

HashMap是基于哈希表的Map实现的的,一个Key对应一个Value,允许使用null键和null值,不保证映射的顺序,特别是它不保证该顺序恒久不变!也不是同步的。
  • u010648555
  • u010648555
  • 2017-03-04 12:45
  • 753
    个人资料
    • 访问:5097次
    • 积分:262
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:7篇
    • 译文:0篇
    • 评论:3条
    博客专栏
    文章分类
    最新评论