第10讲 Java集合框架

1、知识点

1.1、课程回顾

1.2、本章重点

1.2.1 List

1.2.2 Set

1.2.3 Map

2、具体内容

2.1、Java集合框架

2.1.1 为什么需要集合框架

因为我们在开发中发现Java中的数组 不好用。Java中的数组有一个问题:定容。我们一旦要存储的数据超出了数组的长度,就需要对数组进行扩容。所以数组在使用的时候不方便,那么Java的研发人员,就基于数组进行了一次封装,从而出现了集合框架。

集合框架,就是一些Java的类。这些类是用来代替Java中的数组,但是你要知道这些类的底层都是基于数组的封装。

2.1.2 Java中集合框架的关系

Java集合框架实现了常用的基本数据结构,如:集合、线性表、队列、栈、映射表等。

面试题:LIst,Set,Map有关系没?(继承关系上面说)

2.2、ArrayList

用ArrayList来代替Java中的数组,因为他和数组差不多,有增删改查,并且有容量,但是无需我们手动扩容。

数组实现,查询快,增删慢,线程不安全,轻量级;

2.2.1 创建对象

2.2.2 底层原理

当我们调用无参数的构造函数的时候

底层会给我们创建一个Object[]数组elementData并且初始容量是10.

当我们调用有参数的构造函数的时候

所以ArrayList底层是一个Object[] elementData数组

2.2.3 ArrayList的操作(增删改查)

A、增
B、删
C、改

先删除 再添加 或者直接修改

D、查

总结一句话:ArrayList就是一个有序、可重复、可存null的数组列表

2.3 HashSet 集合

总结一句话:HashSet就是一个 无序、去重、可存null的集合。

2.3.1、HashSet的创建

2.3.2、HashSet的底层原理

面试题:HashSet和HashMap有没有联系?

当我们创建一个HashSet的时候

其实在底层帮我们创建了一个HashMap,也就是说HashSet的底层就是HashMap。

2.3.3、HashSet增删改查

Set的可用方法和List的一样

2.3.4、Set中的迭代器对象(取出数据)

Set 因为无序 没有索引值,所以我们也不能通过下标去取数据,也没有key-value键值映射,所以也不能通过key获取数据。所以Set中有一个迭代器对象,他有一个方法 能获取set中的数据。(后面我们学习jsbc中从ResultSet中获取数据的思想和现在一样)

2.4、HashMap(在面试中 经常会问HashMap的底层实现)

总结一句话:HashMap就是一个key-value的键值隐射对象

2.4.1、HashMap的创建

2.4.2、HashMap的底层原理

当我们创建一个HashMap的时候 其实底层帮我们创建两个一个Node[]对象数组

Node是HashMap的静态内部类

所以 我们 存储到Map中的key-value(“name”:“张三”)数据 都是封装程一个Node对象,可以这样理解

Node n = new Node( ) ;

n. key = "name" ;

n. value = "张三" ;

并将这个对象 存储到Node[ ]数组。

2.4.3、HashMap的增删改查

增/改 使用的是 put(key,value)这个方法

思考问题:key不能重复,那么底层是如果判断两个key是否一样呢?

在API文档中 有很多常用方法

2.4.4、遍历map

第10讲-Java集合框架的更多相关文章

  1. Java集合框架 10 连问,你有被问过吗?

    首先要说一下,本文对这些Java集合框架的面试题只做了一个总结式的回答,对每一道题目,都值得深入去了解一下(什么是扎实基本功,这些就是基本功~~),后续可能对每一道题目拆开独立篇章来深入讲解一下. 大 ...

  2. Java集合框架详解(全)

    一.Java集合框架概述 集合可以看作是一种容器,用来存储对象信息.所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下. 数组与集合的区别如下 ...

  3. Java集合框架体系JCF

    Java 集合框架体系作为Java 中十分重要的一环, 在我们的日常开发中扮演者十分重要的角色, 那么什么是Java集合框架体系呢? 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一 ...

  4. 我所理解Java集合框架的部分的使用(Collection和Map)

    所谓集合,就是和数组类似——一组数据.java中提供了一些处理集合数据的类和接口,以供我们使用. 由于数组的长度固定,处理不定数量的数据比较麻烦,于是就有了集合. 以下是java集合框架(短虚线表示接 ...

  5. 知识点:Java 集合框架图

    知识点:Java 集合框架图 总结:Java 集合进阶精讲1 总结:Java 集合进阶精讲2-ArrayList Java集合框架图 我们经常使用的Arrayist.LinkedList继承的关系挺复 ...

  6. Java - 27 Java 集合框架

    Java 集合框架 早在Java 2中之前,Java就提供了特设类.比如:Dictionary, Vector, Stack, 和Properties这些类用来存储和操作对象组. 虽然这些类都非常有用 ...

  7. JAVA—集合框架

    ref:https://blog.csdn.net/u012961566/article/details/76915755 https://blog.csdn.net/u011240877/artic ...

  8. Java 集合框架(常用数据结构)

    早在Java 2中之前,Java就提供了特设类.比如:向量(Vector).栈(Stack).字典(Dictionary).哈希表(Hashtable)这些类(数据结构)用来存储和操作对象组.虽然这些 ...

  9. Java-Runoob-高级课程:Java 集合框架

    ylbtech-Java-Runoob-高级课程:Java 集合框架 1.返回顶部 1. Java 集合框架 早在 Java 2 中之前,Java 就提供了特设类.比如:Dictionary, Vec ...

随机推荐

  1. bucket list 函数解析

    cls_bucket_list 函数 librados::IoCtx index_ctx; // key   - oid (for different shards if there is any) ...

  2. 自定义 Button 选择器

    极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以 ...

  3. jQuery插件之路(三)——文件上传(支持拖拽上传)

    好了,这次咱一改往日的作风,就不多说废话了,哈哈.先贴上源代码地址,点击获取.然后直接进入主题啦,当然,如果你觉得我有哪里写的不对或者欠妥的地方,欢迎留言指出.在附上一些代码之前,我们还是先来了解下, ...

  4. 禅道、jenkins部署记录

    禅道部署1.检查你linux系统的位数(uname -a)2.下载对应位数的禅道包3.通过xftp工具将禅道包拷贝到虚拟机的/opt目录4.tar 对禅道包进行解压5.改配置:vi /opt/zbox ...

  5. 2019中山纪念中学夏令营-Day9[JZOJ](第六次模拟赛)

    Begin (题目的排序方式:Unkown其实是按心情排的) 异或:(摘自百度百科) 异或(xor)是一个数学运算符.它应用于逻辑运算.异或的数学符号为“⊕”,计算机符号为“xor”.其运算法则为: ...

  6. 转载 | Sublime text3 实用快捷键整理

    实用快捷键 Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当前打开文件Ctrl+Shift+W:关闭所有打开文件Ctrl+Shift+ ...

  7. android ——多线程编程

    1.定义一个线程只需要新建一个类继承自Thread.然后重写run()方法,并在里面编写耗时逻辑即可: class MyThread extends Thread{ public void run() ...

  8. 记一次mysql主从同步因断电产生的不能同步问题 1236 1032

    背景: 项目新上线一个月,qa需要测试断电服务拉起,服务拉起成功后,发现mysql主从异常,以下是发现的问题以及解决方案 问题1: Slave_IO_Running:  No 一方面原因是因为网络通信 ...

  9. c# http Post Get 方法

    /// <summary> /// get方式访问webapi /// </summary> /// <param name="url">< ...

  10. 【openmp】for循环的break问题

    问题描述:在用openmp并行化处理for循环的时候,便无法在for循环中用break语句,那么我们如何实现这样的机制呢?在stackoverflow上看到一个不错的回答总结一下. volatile ...