java集合介绍

标签: 集合List List之间的区别 LinkedList介绍 java基础 ArrayList介绍
749人阅读 评论(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




查看评论

C#中的‘集合’案例

-
  • 1970年01月01日 08:00

Java集合类详细介绍

Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └...
  • lqqwonderful
  • lqqwonderful
  • 2017-05-22 14:43:15
  • 411

Java集合详细介绍及原理

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

简单介绍Java集合类

先说说为什么要用带Java的集合类?    在Java中集合就是用来存储数据的,有人说了可以用数组啊。没错,的确可以用数组, 但是如果你不知道你要存放的数据有多少的长度,那你该怎么...
  • hbz1993
  • hbz1993
  • 2015-01-13 08:27:53
  • 471

【集合】Java集合框架介绍

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

一个讲解很清晰的Java集合框架PPT

  • 2011年05月20日 19:39
  • 601KB
  • 下载

Java中的集合类型的迭代器(Iterator)

迭代器(Iterator)  迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。  Java中...
  • Frank_Jay
  • Frank_Jay
  • 2015-10-08 21:21:48
  • 492

java中常用的集合极其特点

java.util.Collection [I] +--java.util.List [I]     +--java.util.ArrayList [C]     +--java.util.Linke...
  • yxb_yingu
  • yxb_yingu
  • 2016-04-21 20:34:25
  • 1281

集合的引入

一、对比数组引入集合 1、数组: 存储同一种数据类型的集合容器。 2、数组的特点: 1)只能存储同一种数据类型的数据。 2)一旦初始化,长度固定。 3)数组中的元素与元素之间的内存地址是连...
  • qq_34944851
  • qq_34944851
  • 2016-05-21 18:35:50
  • 253

Java Properties集合的 基本功能 方法

package io.properties; import java.io.BufferedReader; import java.io.File; import java.io.FileInpu...
  • Aseveng
  • Aseveng
  • 2017-10-15 15:19:27
  • 225
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 7776
    积分: 318
    排名: 24万+
    博客专栏
    文章分类
    最新评论