精选文章 JAVA 集合框架简介

JAVA 集合框架简介

作者:测试小白-starry 时间: 2021-02-05 09:43:14
测试小白-starry 2021-02-05 09:43:14
【摘要】1. JAVA 集合框架主要分三部分, set , list 和 Map 
(1)List 列表 
特点:列表中的元素可重复,  元素有先后顺序 
list 存储以及相关实现类, 如图: 
 
 继承list接口的类主要有 LinkedList, Vector, ArrayList。 
其中 vector 和 ArrayList底层是数组结构,两者的区别在于 Vector中的方法使用了syn...

1. JAVA 集合框架主要分三部分, set , list 和 Map

(1)List 列表

特点:列表中的元素可重复,  元素有先后顺序

list 存储以及相关实现类, 如图:

JAVA 集合框架简介1

 继承list接口的类主要有 LinkedList, Vector, ArrayList。

其中 vector 和 ArrayList底层是数组结构,两者的区别在于 Vector中的方法使用了synchronized 关键字来修饰, 这个关键字是需要等待线程的,从而vector 中的方可以使法线程安全。但同时影响了程序性能, Arraylist则反之,线程不安全,但是性能较高。 而在使用中vector几乎不使用了,因为性能低,对于线程安全, Arraylist 也可以做到,使用List list = Collections.synchronizedList(new ArrayList(...)) 可以是List 变成线程安全。

而LinkedList 和 Arraylist的区别在于底层结构的不同, Arraylist 底层是数组结构,LinkedList是链表结构, 所以两者的区别就在于数组和链表的特性,数组结构:插入和删除的速度比较慢但是查询比较快。而链表结构:插入和删除的速度比较快但查询速度比较低。至于怎样使用看具体情况。PS LinkedList也没有用synchronized关键字来修饰

List常用方法

boolean   add(E e)向列表尾部添加知道元素

void add(int index, E element)在列表指定位置插入指定元素

void clear()从列表中移除所有元素

E get(int index)返回列表中指定位置的元素

int hasCode()返回列表中的哈希码值

int indexOf(Object o)返回此列表中第一次出现的指定元素的索引

boolean isEmpty()如果列表不包含元素则返回true

Iterator iterator()返回按适当顺序在列表的元素上进行迭代的迭代器

E remove(int index)移除列表中的指定元素位置

int size()返回列表中的元素数量

object[] toArray()返回按是的的顺序包含列表中的所有元素的数组

 (2)Set 集合

特点:元素不可重复,且元素没有顺序

Set 存储以及相关实现类, 如图:

JAVA 集合框架简介2

 那Set是如何去判断两个对象是否重复呢,Set是通过Equals来判断两个对象是否相等,而不是通过==来判断。(简单来讲equals是判断内容是否相同,==是通过栈内存存放在堆内存的地址来判断是否相同)。

set接口的常用实现类有hashSet,linkedHashSet和TreeSet。hasSet底层采用的是哈希表算法,其底层测试个数组,查询操作速度较快,对少量数据做插入操作较快,数据越多,插入操作性能越低(空间复杂度和时间复杂度)。当使用hasSet做一个插入操作,它是怎样一个流程呢?1.显示判断该对象的hascode值。如果hascode值与hasSet已有数据不同,则直接把给对象放到hascode的指定位置。如果hascode值相同,即该hascode位置上已经有数据了。 则判断这两个数据的equals是否相同,如果equals相同则表示要插入的数据和已有数据是同一个数据,不保存在哈希表中,反之则表示不是同一个数据,则会存在该hascode值的同槽位的链表上

LinkedHashSet类它不允许元素重复,但是能记录元素添加的顺序。因为它有哈希表的属性和链表的属性。

TreeSet类使用的是红黑树算法(不太了解),对存储的元素会自然排序(从小到大),不保证元素添加的先后顺序,红黑树中的元素的数据类型需要一致,否则报错。判断两个元素是否重复同过方法CompareTo,红黑树算法善于做范围查找

Set的常用方法

boolean add(E e)如果set中尚未存在指定的元素,则添加此元素

void clear()移除此set中的所有元素

boolean contains(object o)如果set包含指定的元素,则返回true

boolean equals(object o)比较指定对象与此set的相等性

int hashCode()返回Set的哈希码值

boolean isEmpty()如果set不包含元素则返回true

Iterator   iterator()返回在此Set中的元素上迭代的迭代器

boolean remove(object o)移除set中存在的指定元素

int size()返回set中的元素数量

object[] toArray()返回一个包含set中所有元素的数组

 

Map

特点: key-value 键值对。其中key是唯一的不可重复的,value是可重复的,一个Key只能对应一个value,但一个value可以对应多个key。可以理解key是一个set集合,而value是一个list集合。

Map存储以及相关存储类,如图

JAVA 集合框架简介3

从这几个实现类可以看出,和Set的几个常用实现类差不多,故 HashMap采用的是哈希表算法,不会保存Key添加的顺序,key也不允许重复,判断标准与hasSet一致即key的equals和hascode。LinkedHashMap 采用链表和哈希算法,Key不允许重复但会记录先后的添加顺序,TreeMap。采用红黑树算法,key会自然排序,不允许重复,重复标准与HashMap相同。

Map中的常用方法

void clear()从此映射中移除所有映射关系

boolean containsKey(object key)如果此映射包含指定键的映射关系,则返回true

boolean containsValue(object value)如果此映射将一个或多个键映射到指定值,则返回true

boolean equals(object o)比较指定的对象与映射是否相等

v get(object key)返回指定所映射的值,如果此映射不包含该间的映射关系,则返回Null

int hashCode()返回此映射的哈希码值

boolean isEmpty()如果此映射未包含键值对映射关系则返回true

set keySet()返回此映射中包含的建的Set集合

V put将指定的值与映射中的指定值关联

V remove(object key)如果存在一个建的映射关系,则将其从此映射中移除

int size()返回此映射中的键值对映射关系数量

 

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:Java五个内存的划分及堆、栈、方法区的运行过程

下一篇:前端路 - Webpack

您可能感兴趣

  • java 异步上传文件

    我们的java上传文件,需要form同步上传,并且需要设置enctype为multipart/form-data。 如果将form使用ajax异步提交的话,将会报错说enctype不是multipart/form-data类型 但有时候确实又有酱紫的需求,可以实现,需要借助jquery.form.js 插件 插件下载地址...

  • java 解析excle和生成excle文档

    只贴出关键代码,其他一概论之 java解析excle文件: Workbook book = Workbook.getWorkbook(new File(fileName)) ; //filename为需要解析的excle  Sheet sheet = book.getSheet(0);  int rows = ...

  • 剖析Force.com的多租户架构(1)- Salesforce的简介

          前段时间受到桂素伟老师的嘱托,希望我们能跟新来的学员谈一谈工作学习上面的经验心得。在这里我不敢托大,只是感到自己能很幸运的进入了一家从事云计算开发的公司任职。也确实新学了点东西。希望在这里拿出来和大家一起分享。        目前国内云计算热潮刚刚兴起,相信很多同学对云计算是分感兴趣。salesforce是在云计算领域...

  • Java程序员面试中的多线程问题

    2013-3-5 16:32| 发布者: sxwgf| 查看: 1735| 评论: 0|来自: 伯乐在线  http://web.itivy.com/article-184-1.html     很多核心JAVA面试题来源于多线程(Multi-Threading)和集合框架(Collections Framework),理解核心线程概念时...

  • 记不住但是实用的java方法

    一、字符串转换方法     1、toString,需要保证调用这个方法的类、方法、变量不为null,否则会报空指针。    2、String.valueOf。这个方法在使用的时候是有些特殊的。一般情况下,如果是确定类型的null传入,返回的是字符         串“null”,而如果直接传入null,则会发生错误     3、(String) 字符...

  • Java泛型---入门

    为什么要引入泛型--->定义输入对象类型,方便使用、安全     1)对于一个Student类,存放一个Object对象,向内部存储数据,使用以下方法:     没有泛型的数据存储与读取     创建一个PO类(JavaBean),实体化对象,存储数据的类 /** * PO类(实体化对象,用于存储数据的类),JavaBean * @author ...

  • 【java多线程】---线程创建、start、run

    线程创建、start、run   一、创建线程方式      java创建线程的方式,主要有三种:类Thread、接口Runnable、接口Callable。 1、Thread和Runnable进行比较 他们之间的区别  1、实现Runnable的类更具有健壮性,避免了单继承的局限。  2、Runnable更容易实现资源共享,能多个线程同时处理一个资...

  • Java中的方法

    在其他语言中,方法称为过程或函数。带返回值的方法称为函数,返回值类型为void的方法称为过程。 定义方法 public static int max(int num1,int num2){ return 0;} public static 为修饰符 int 为返回值类型 max 为方法名 int num1 为形式参数 int num1,int num...

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
JAVA 集合框架简介介绍:华为云为您免费提供JAVA 集合框架简介在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多JAVA 集合框架简介的相关内容。| 移动地址: JAVA 集合框架简介 | 写博客