3.集合
01类集概述
为了方便用户操作各种类型的数据结构,Java提供了可以直接拿来使用的类,JDK1.2(Java2)之后正式引入类集的概念,类集可以称为Java对数据结构的实现。
类集中最大的也是最重要的三个接口:Collection(单值)、Map(双值)、Iterator(迭代器)。
所有类集操作的类或接口都在java.util包里。
Java类集结构图:
02常见数据结构
一、栈
概念
栈是限定仅在表尾进行插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈。
特点
1.先进后出:最先进去的最后出来。
2.入口和出口都是栈顶位置。
名词
1.压栈:存元素
2.弹栈:取元素
概念图
二、 队列
概念
队列简称队,是一种特殊的(运算受限制)线性表,只允许在表的一端进行插入,另一端进行删除。
队尾(rear)是允许插入的一端,队头(front)是允许删除的一端,不含任何数据元素的队列称为空队列。
包含单端队列和双端队列两种。
特点
1.先进先出:谁先进来,谁先出去。
2.队列的入口和出口各占一侧。
概念图
三、数组
概念
数组是占用了一块连续内存空间的有序存放元素的序列。
特点
1.查找元素快:通过索引可以快速访问指定位置的元素。
2.增删元素慢:需要创建新的数组根据索引进行覆盖。
四、链表
概念
链表由一系列结点(链表中的每一个元素叫做结点)组成,结点可以在运动时动态生成,每个结点包括两部分:数据域和指针域(指向下一个结点的位置)。
特点(主要介绍单向链表)
1.多个结点之间通过地址进行连接
2.查找元素慢:想找某个元素需要通过连接的结点依次往后寻找。
3.增删元素快:直接将指针域修改为需要连接下个元素的地址。
拓展(作为详细了解)
戳链接:https://www.cnblogs.com/qianguyihao/p/4761593.html
五、二叉树
概念
二叉树指每个结点不超过2个的有序树。顶上的结点叫作根节点,两边被称作“左子树”和“右子树”。
拓展(红黑树)
戳链接:https://www.cnblogs.com/tiancai/p/9072813.html
03Collection接口
概念
Collection是在整个Java类集中保存单值的最大操作父接口,里面每次操作的时候都只能保存一个对象的数据,此接口定义在java.util包中。
开发中使用其操作的子接口List(允许存放重复元素)、Set(不允许存放重复元素)
定义
public interface Collection extends Iterable(使用了泛型技术)
常用方法(详见API)
04Collection子接口一之List接口
定义
public interface List extends Collection
相继Collection接口的扩充方法
05List集合下的实现类一之ArrayList(异步,线程不安全)
概念
ArrayList使用的是数组结构存储数据,增删慢,查找快。
定义
public class ArrayListextends AbstractList implements List, RandomAccess, Cloneable, Serializable;
(无参构造时)注意:–组件元素的类型不可使用int、float这样的
构造方法
–ArrayList() //默认无参的构造容量为10,实际最开始的长度为0,每次扩容是变成1.5倍的容量
–ArrayList(int initialCapacity):当需要存储的数据较多,建议用一参构造方法来设置初始化容量值,否则频繁扩容会浪费大量的内存
–ArrayList(Collection<? extends E> c)
2.每次扩容变成1.5倍的容量?
源码查看:写一个add方法点击源码add查看–>add(,)–>grow()–>grow(带参)–>newCapacity
06List集合下的实现类二之Vector(同步,线程安全)
概念
Vector实现了可增长的对象数组。像数组一样,它包含可以使用整数索引访问的组件。 但是, Vector的大小可以根据需要增大或缩小,以便在创建Vector后添加和删除项目。
定义
public class Vector extends AbstractList implements List, RandomAccess, Cloneable, Serializable
构造方法
–Vector()//构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零。
–Vector(int initialCapacity)//构造一个具有指定初始容量且容量增量等于零的空向量。
解析:查看源码add里的newcapacity的设置,增量为0时会翻一番旧容量来扩容
–Vector(int initialCapacity, int capacityIncrement)//构造具有指定初始容量和容量增量的空向量。
–Vector(Collection<? extends E> c)//按照集合的迭代器返回的顺序构造一个包含指定集合元素的向量。
7.UML、XML与JSON
api使用概述
概念
从客户端与服务器端交互的角度来看,客户端的代码向服务器端发送连接的时候带有某些关键字参数以及接到服务器有可能发生变化的结果,那么我们就称像客户端连接这种服务器的网址,这种可具有操作性的网址为api。
用法
URL请求服务器时,如何传递参数?
常用GET请求方式,传递参数的格式:协议://资源路径+名称?name=value&name1=value1
注:一个参数的名称可以对应多个参数,即可以两个相同的name等于不同的value
使用案例:身份实名认证、短信发送等等
URL编码
概述
在 java 开发中,当向服务器传输时发现参数乱码了再去进行转码。
一般是将中文进行转码,保证传输的时候不出现乱。
最常用的方式是URLEncode 与 URLDecode。
方式
URLEncode:
将普通字符串转换成application/x-www-from-urlencoded字符串
示例:字符串中的非西欧字符的内容,会被转化成%XX%XX XX 为十六进制的数字
String urlString = URLEncoder.encode(“你好”, “UTF-8”); System.out.println(urlString);//输出:%E4%BD%A0%E5%A5%BD
URLDecode:
将application/x-www-from-urlencoded字符串转换成普通字符串
示例:
String keyWord = URLDecoder.decode("%E4%BD%A0%E5%A5%BD", “UTF-8”); System.out.println(keyWord);//输出:你好
XML与JSON
XML简介
XML:可扩展标记语言(Extensible Markup Language)【软件与软件交流的语言】
特性: 1. xml具有平台无关性,是一门独立的标记语言。
2. xml具有自我描述性
为什么学习XML: 1. 网络数据传输. 2. 数据存储 3. 配置文件
XML文件:1. .XML文件是保存XML数据的一种方式
2.XML数据也可以以其他的方式存在(如在内存中构建XML数据)。
3. 不要将XML语言狭隘的理解成XML文件
XML语法格式
- XML文档声明: <?xml version="1.0" encoding="UTF-8"?>
- 标记 ( 元素 / 标签 / 节点)
XML文档,由一个个的标记组成.
语法:
开始标记(开放标记): <标记名称>
结束标记(闭合标记): </标记名称>
标记名称:
自定义名称,必须遵循以下命名规则:
1.名称可以含字母、数字以及其他的字符
2.名称不能以数字或者标点符号开始
3.名称不能以字符 “xml”(或者 XML、Xml)开始
4.名称不能包含空格,不能包含冒号(:)
5.名称区分大小写
标记内容: 开始标记与结束标记之间 ,是标记的内容.
例如 ,我们通过标记, 描述一个人名: 张三 - 一个XML文档中, 必须有且且仅允许有一个根标记.
正例:
张三
李四
反例:
李四
麻子 - 标记可以嵌套, 但是不允许交叉.
正例:
李四
18
反例:
李四
18
- 标记的层级称呼 (子标记, 父标记 , 兄弟标记, 后代标记 ,祖先标记)
例如:
李四
180cm
李四
200cm
name是person的子标记,也是person的后代标记
name是persons的后代标记.
name是length的兄弟标记.
person是name的父标记.
persons是name的祖先标记. - 标记名称,允许重复
- 标记除了开始和结束 , 还有属性.
标记中的属性, 在标记开始时描述, 由属性名和属性值组成.
格式: 在开始标记中, 描述属性.
可以包含0-n个属性, 每一个属性是一个键值对!
属性名不允许重复 , 键与值之间使用等号连接, 多个属性之间使用空格分割.
属性值 必须被引号引住.
案例:
李四
18
李四
20
- 注释
注释不能写在文档文档声明前
注释不能嵌套注释
格式:
注释开始:
总结
1.ArrayList通过无参构造的集合对象在开始时长度为多少?
答:0(并非10)
解析:源码查看:无参构造–>DEFAULTCAPACITY_EMPTY_ELEMENTDATA–>此数组为空,即长度为0
注:无参构造里的this.elementData是指存数据的数组。
2.ArrayList对象的添加方法返回值是什么?
答:只能是True
解析:写一个add方法点击源码查看