`
l4432848
  • 浏览: 253848 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

集合框架

    博客分类:
  • java
 
阅读更多

1.HashSet集合框架

hashSet集合的添加方法上次已经讲过了,我们接下来要在maven工程下来讲其他的一些方法了:

image

如上图,把环境弄好。 写个循环来测试一下能否存储值:

image

其运行结果如:

image

其实我们自己写的hashSet的添加方法的objs数组长度只定义为了10,这是不太够的,我最好都要给定到1000,或者更多一点。这个长度定大一点,集合的运行速度就会更加快一点。

哈希集合的特点在于检索速度非常快,链表数组删除、修改比较灵活方便、然后就是数组集合的添加比较快。其中数组集合和链表集合是有序集合,而哈希集合是无序集合,它添加进去的【学Java,到凯哥学堂kaige123.com】数据的顺序是打乱的。哈希集合的特点在于检索速度非常快,我们这里有junit来测试一下它的检索速度到底怎么样,先把junit的依赖加进来:

image

然后,我们写个junit的测试案例代码,测试一下ArrayList和HashSet两种集合的检索时间的差别:

image

由上图,我们可以看出,ArrayList的检索速度和HashSet的检索速度比起来简直是太慢了。

自己写一个检索方法:

哈希里面存储数据时用到的是链表集合的方式,我们在检索一个集合中有没有该数据时,要先把这个数据的hash值计算出来,找到相应的位置,然后再到对应位置下的单链里面去一个一个去问。我们的写的contains1方法如下图:

image

写这个方法的主要思路就是要先把要检索的数据进行hashCode值的计算,然后定位到在Object数组的哪个位置里面,然后到相应的位置下的单链表里面去一个一个的对比。

image

上图是自己写的contains1方法的检索速度测试,

image

image

image

由上可知,在Object数组长度是10的时候,我们把检索的数据量加到1000000的时候,需要6000多毫秒,这是比较慢的,但是如果我们把Object数组长度增加到10000,再来检索1000000个数据,此时只要21毫秒,可以看出,Object数组的长度越长,检索的速度就会大大的缩短。因为Object数组长度长了,那么每个位置下的单链表的长度就短了,比对的时间就少了。 所以对于hashSet来说,Object数组的长短决定了检索的时间快慢。哈希集合添加速度不快,查找速度非常快,之所以会有这么快的查找速度,是因为它在查找数据之前就已经做好了充分的准备工作。我们写的哈希集合和系统的哈希集合是有一定差距的,系统的哈希集合的Object是可以自动改变长度的。系统的哈希集合的Object数组会自动根据数据量的多少来进行相应的扩大或减少,当数据量多了,Object的长度就会增加。

集合家族:

image

主要的类结构如上图所示。其中Collection、List、Set三个是接口。

image

为啥要在最高的集合接口下弄两个不同的接口?有何用途?

其中List集合是有序集合,可以添加重复值。

Set集合是无序集合,检索速度非常快,不可添加重复值。这两个都继承于最高接口,它们都是集合。 这个集合框架结构是很好的了,为啥要做不同的集合呢?

因为集合是数据存储中心,要存数据的,但是存数据时有各种各样的不同的要求,有些要求你存储速度快,有些要求检索速度快,还有一些要求存储有序,所以说为了满足各种需求,我们就应该做出不同的集合接口来进行各种数据的存储。

集合框架就是包含不同的集合的,每个集合都各有特色,每个集合都是为了某种特定业务而开发出来的。那最高集合接口Collention呢?它实际上就是规定了,规定集合的方法,约定了只要你是集合,就要按照我的方法来,就必须有这些方法。不然就不算是集合了。最高集合是统一方法的。

ArrayList:有序的、数组的集合
Vector      数组集合,线程安全的
      >>stack   堆栈集合、进栈出栈的描述很方便,Vector的派生,适用于某些算法。
LinkedList:双链表集合,上可找下,下可找上,删除、插入、前面加入、中间加入都非常方便灵活的,它的结构没有ArrayList动荡这么大。
HashSet:天生服务于检索的,检索速度快,无序
TreeSet:在做到检索速度快的同时,还可以帮你排序,这是二叉树的算法。添加进来的数据会帮你排序摆放(和有顺序不是一回事,添加进来的数据可以排顺序的。)

先认识一下java.util.Collection,最高的集合接口:

image

方法主要有以上这些,可以将这些方法进行分类管理:

主要有哪几类呢?

添加数据

删除数据

查看数据

转换数组

image

什么是集合? 集合就是可以进行无限存储的容器。重点是容器: 说起容器呢,设计一种容器,应该有哪些类型的方法呢? 比如桶: 要有存放、取出、查询、清除这些类型的功能方法的。 集合是容器,能存储、取出,大体的方法应该设计为下面这些种类:

image

添加数据:

add(Object)每次添加一个数据
addAll(Collection)批量添加数据对象
删除数据:
remove(Object)删除某个数据对象
removeAll(Collection)批量删除
retainAll(Collection)交集删除
clear()清除所有数据
查询数据:
iterator拿出所有数据
contains(Object)检索某个数据
containsAll(Collection)批量检索
isEmpty判断是否为空集合
size看集合的大小

转换数组 toArray将集合转换为对象数组。 作为一个容器,上面的方法是必须设计出来的,要求我们的每个集合都要有这些方法的。我们设计容器的时候,要把它设计为接口类型,我们是规范容器的功能、不是实现容器的功能,这是设计的重点思路。 如果我们做个集合,也可以遵照上面的最高集合接口规定的方法规则的。

image

上面就是交集删除的意思(retainAll)给你的数据是要保留的,其他的删除掉。

Iterator是迭代器,以后拿值都用迭代器来拿值了,为啥用迭代器来拿值了呢?

以前不是都用下标来拿值的吗?

List一般可以用下标来拿值,但是Set也可以用下标来拿值吗?

Set是不适合按下边拿值的,因为Set是散列的集合,不好按下标来拿值。

Set集合应该用迭代器来拿值,实际上所有的集合都可以用迭代器来拿值,只不过List也可以使用下标来拿值。

List集合接口:

image

List集合的方法有哪些?如上图。可以看出上面罗列的方法都是基本上与下标有关系的。

Add(int,Object)按下标插入
Add(int,Collection)按下标批量插入
Get(int)按下标获得
IndexOf(Object)看集合中有没有这个对象,在集合的哪个下标下
LastIndexOf(Object)从后往前看集合中有没有该对象,在集合的哪个下标下
ListIterator(int)list的迭代器,甚至可以设置从哪个地方开始迭代取值
Remove(int)按下标删除
Set(int,Object)按下标替换
SubList(int,int)按下标截取

image

由上图可知,List的相关方法都是与下标有关系的,这些是List集合特有的用下标控制的方法,所以是不会在Collection里面去规定的。

Set集合接口里面是没有自己特有的方法的,它的所有方法都是从父类Collection里面继承下来的。为啥它不设计自己的方法呢?

因为父类的方法都够它的功能了,而且它自己也没有什么特殊的方法要重新设计的。没有必要再重新设计方法。

总结一下:

学习了如何搭建集合框架,如何设计每个方法?上面是接口、规范,下面实现。

0
0
分享到:
评论

相关推荐

    集合框架学习笔记

    集合框架是Java编程语言中的核心组成部分,它提供了一套高效、灵活的数据结构和算法操作,使得程序员能够方便地存储和管理对象。这篇学习笔记将深入探讨Java集合框架的基础概念、主要类库以及常见应用场景。 首先,...

    集合框架的总结

    在Java编程语言中,集合框架是开发者日常工作中不可或缺的一部分,它提供了一种高效管理对象的方式。本文将深入探讨集合框架的总结,重点关注其核心接口、类以及如何通过源码理解和利用这些工具。 首先,集合框架的...

    学士后Java集合框架和泛型课后习题答案

    Java集合框架是Java编程语言中的一个核心组成部分,它为数据存储和操作提供了丰富的类库。在Java中,集合框架主要包括接口(如List、Set、Queue)和实现这些接口的类(如ArrayList、HashSet、LinkedList等)。这个...

    Java集合框架及泛型

    Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了一组高效的数据结构和操作这些数据结构的方法。泛型则是Java在J2SE 5.0版本引入的一个特性,极大地提高了代码的类型安全性和可读性。下面我们将深入...

    java集合框架图

    ### Java集合框架详解 #### 一、Java集合框架概述 Java集合框架是Java标准库的重要组成部分,它提供了存储和操作对象的各种数据结构。通过使用集合框架,开发人员可以轻松地管理不同类型的数据集,并且能够利用...

    Java集合框架详解

    Java集合框架是Java编程语言中的一个核心组成部分,它为存储、管理和操作对象提供了一套统一的接口和类。本文将深入解析Java集合框架的各个方面,包括Collection、List、Set和Map,以及它们的相关实现和使用原理。 ...

    集合框架练习.doc

    集合框架练习 在 Java 中,集合框架(Java Collections Framework)是 Java 语言中的一种数据结构,可以用来存储和操作大量数据。集合框架提供了多种数据结构,如列表、集合、映射等,可以满足不同的应用需求。下面...

    java集合 框架 泛型

    Java集合框架是Java编程语言中一个至关重要的组成部分,它为数据存储和操作提供了丰富的类库。泛型是Java 5引入的一项创新特性,极大地增强了集合框架的安全性和效率。本讲解将深入探讨这两个主题,以及与之相关的...

    《集合框架及泛型》

    BDQN ACCP 7.0 Java《集合框架及泛型》学习资料.part1

    Java集合框架总结

    ### Java集合框架总结 #### 一、Java集合框架概述 Java集合框架是Java标准库的一部分,它提供了一系列的接口和类来存储和操作各种类型的对象集合。这些接口和类遵循一致的设计模式,使得开发人员可以方便地管理和...

    Java集合框架使用总结

    ### Java集合框架使用总结 #### 前言 本文旨在为读者提供关于Java集合框架的概览性介绍,帮助理解其整体架构与设计理念。对于希望深入掌握特定接口或类使用方法的学习者,建议查阅官方提供的Java API文档。 #### ...

    Java集合框架学习笔记

    Java集合框架是Java编程语言中一个至关重要的组成部分,它提供了数据结构和算法的抽象,使得开发者可以方便地存储和管理各种类型的数据。本篇将详细探讨Java集合框架的基础知识,包括核心接口、类的层级结构以及Java...

    【Java】Java集合框架思维导图。

    xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...

    Java集合框架.ppt

    集合是将多个元素组成一个单元的...Java集合框架,为我们提供了一套性能优良、使用方便的接口和类,我们不必再重新发明轮子,只需学会如何使用它们,就可以处理实际应用中出现的问题了Java集合框架位于java.util包中

    集合框架的使用方法

    在Java编程语言中,集合框架是处理对象集合的核心工具,它提供了一套高效、灵活的数据结构和算法。本文将深入探讨集合框架的使用方法,包括其基本概念、主要类库以及常见操作,同时也会提及一些源码分析和实用工具。...

    集合框架及泛型资料

    集合框架与泛型是Java编程语言中的核心概念,它们极大地提高了代码的可读性、安全性和效率。在Java中,集合框架是一组接口和类,它们提供了存储和操作对象的统一方式。泛型则是Java 5引入的一个特性,用于在编译时...

    集合框架源码分析

    Java集合框架是Java编程语言中的一个核心组件,它为数据组织提供了一系列的接口和类,使得数据处理变得高效且易于管理。在这个主题中,我们将深入分析集合框架的源码,理解其内部工作原理,以便更好地利用这些工具...

    数据结构和Java集合框架

    数据结构和Java集合框架是Java编程中至关重要的概念,它们是高效编程和算法设计的基础。在Java中,数据结构指的是组织、存储和管理数据的方式,而集合框架则是一组接口和类,为处理各种数据结构提供了统一的API。 ...

Global site tag (gtag.js) - Google Analytics