学习数据结构第一步(必看)——初识集合框架

目录

一,学习数据结构前置知识

二,什么是数据结构?

1.什么是数据结构?

2.容器背后对应的数据结构

3.相关Java知识

4.什么是算法?

三,什么是集合?

四,集合框架的重要性


一,学习数据结构前置知识

学习数据结构首先我们需要了解集合与数据结构

二,什么是数据结构?

1.什么是数据结构?

一提及数据结构我们就会想到算法,那数据结构和算法有何关系?其实这两个玩意是相辅相成的,一个好的算法离不开好的数据结构,而我们学数据结构的目的就是为了能够体现在算法上,能够更好的应用。

面对数据结构这个词,我们很容易误以为它是什么比较高大上的玩意儿,其实不然,我们可以简单理解成数据 + 结构,主要用来描述和组织数据。比如说,我们有十万个用户信息,那这些信息我们如何去描述和组织起来?答案就是使用数据结构这个东西。

例如:数组就是一种简单的数据结构(数组也是用于描述和组织一组数据)

数据结构又有很多种,在不同的场景使用不同的数据结构会加快我们程序运行的效率。

总结:数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。

注意:数据结构是一门单独的学科,它和语言没有关系(博主以后会使用Java来写数据结构),理解思想很重要,它能锻炼你的逻辑思维。

2.容器背后对应的数据结构

该阶段,我们主要学习以下容器,每个容器其实都是对某种特定数据结构的封装,大概了解一下,后序会给大家详细讲解并模拟实现:
1. Collection 是一个接口,包含了大部分容器常用的一些方法
2. List 是一个接口,规范了 ArrayList LinkedList 中要实现的方法
•   ArrayList: 实现了 List 接口,底层为动态类型顺序表
•   LinkedList:实现了 List 接口,底层为双向链表
3. Stack :底层是栈,栈是一种特殊的顺序表
4. Queue :底层是队列,队列是一种特殊的顺序表
5. Deque :是一个接口
6. Set :集合,是一个接口,里面放置的是 K 模型
•   HashSet:底层为哈希桶,查询的时间复杂度为 O(1)
•   TreeSet:底层为红黑树,查询的时间复杂度为 O(),关于 key 有序的
7. Map :映射,里面存储的是 K-V 模型的键值对
•   HashMap:底层为哈希桶,查询时间复杂度为 O(1)
•   TreeMap:底层为红黑树,查询的时间复杂度为 O(),关于 key 有序

3.相关Java知识

1. 泛型 Generic
2. 自动装箱 autobox 和自动拆箱 autounbox
3. Object 的 equals 方法
4. Comparable 和 Comparator 接口

4.什么是算法?

算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。

三,什么是集合?

Java会将一些数据结构封装起来满足我们对一些基础数据结构的需求。而如果集合当中不包含需要使用的数据结构时,这个时候就得我们自己动手写了。

官方教程

Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces和其实现类 classes 。
其主要表现为将多个元素 element 置于一个单元中,用于对这些元素进行快速、便捷的存储 store 、检索 retrieve 、管理 manipulate ,即平时我们俗称的增删查改 CRUD 。
例如,一副扑克牌(一组牌的集合)、一个邮箱(一组邮件的集合)、一个通讯录(一组姓名和电话的映射关系)等等。
类和接口总览
整理一下

四,集合框架的重要性

1. 开发中的使用
•   使用成熟的集合框架,有助于我们便捷、快速的写出高效、稳定的代码
•   学习背后的数据结构知识,有助于我们理解各个集合的优缺点及使用场景
2. 笔试及面试题
腾讯-Java后台开发面经
1. HashMap 了解不,介绍一下,如果一个对象为 key 时,hashCode 和 equals 方法的用法要注意什么?
2. HashSet 和 HashMap 的区别是什么?
3. HashMap 是线程安全的么?那需要线程安全需要用到什么?
阿里巴巴-Java后台开发面经
1. ArrayList 和 LinkedList 的区别是什么?
2. 有了解过 HashMap 的具体实现么?
3. HashMap 和 ConcurrentHashMap 哪个效率更高?
今日头条-Java后台开发面经
1. 编程题:判断一个链表是否是一个回文链表。
2. Redis 的 zset 类型对应到 java 语言中大致是什么类型?
3. hashCode 主要是用来做什么用的?

完.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小六学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值