创建
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43/*
有参构造
参数大于0,创建初始容量等于参数
等于0,创建空
*/
public ArrayList(int initialCapacity) {
if (initialCapacity > 0) {
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
this.elementData = EMPTY_ELEMENTDATA;
} else {
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
}
}
/*
无参构造
创建空,这里常量空数组定义与有参空数组不同
为了扩容时区分
*/
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
/*
参数是集合子类
size不为0时,若传入集合本身就是ArrayList,直接指向
否则,复制一遍
*/
public ArrayList(Collection<? extends E> c) {
Object[] a = c.toArray();
if ((size = a.length) != 0) {
if (c.getClass() == ArrayList.class) {
elementData = a;
} else {
elementData = Arrays.copyOf(a, size, Object[].class);
}
} else {
// replace with empty array.
elementData = EMPTY_ELEMENTDATA;
}
}/* 将当前列表容量最小化,为了最小化存储 */ public void trimToSize() { modCount++; if (size < elementData.length) { elementData = (size == 0) ? EMPTY_ELEMENTDATA : Arrays.copyOf(elementData, size); } } /* 将当前列表容量扩容到能包含指定参数的大小 注意通过无参构造的“空”不会扩容,另外若需要大小小于等于10,也不会扩容 */ public void ensureCapacity(int minCapacity) { if (minCapacity > elementData.length && !(elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA && minCapacity <= DEFAULT_CAPACITY)) { modCount++; grow(minCapacity); } } private Object[] grow(int minCapacity) { return elementData = Arrays.copyOf(elementData, newCapacity(minCapacity)); } /* 重点 新大小等于原来大小+原来大小的一半(向下取整) 如果还不够, 如果本来就是无参构造的空数组,扩容到10和新大小的最大值 */ private int newCapacity(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity <= 0) { if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) return Math.max(DEFAULT_CAPACITY, minCapacity); if (minCapacity < 0) // overflow throw new OutOfMemoryError(); return minCapacity; } return (newCapacity - MAX_ARRAY_SIZE <= 0) ? newCapacity : hugeCapacity(minCapacity); }
集合框架概述
- Collection接口
- List接口:存储有序的,可重复的数据
- ArrayList:作为List接口的主要实现类,线程不安全,效率高,底层使用Object[]
- LinkedList:底层使用双向链表,频繁插入删除
- Vector:作为List古老实现类,线程安全,效率低
- Set接口
- HashSet:作为Set接口主要实现类,线程不安全,可以存null值
- LinkedHashSet:HashSet的子类,遍历按添加顺序,用于频繁遍历
- TreeSet:红黑树实现,数据要是同一个类,可以按指定属性排序
- List接口:存储有序的,可重复的数据
- Map接口
- HashMap:Map的主要实现类,线程不安全,效率高,可以存null的key和value
- LinkedHashMap:HashMap的子类,遍历按添加顺序,用于频繁遍历
- TreeMap:按照添加的key-value排序,实现排序遍历,此时考虑key的排序,底层使用红黑树
- Hashtable:古老实现类,线程安全,效率低,不能存null
- Properties:Hashtable子类,key和value都是String,常用来处理配置文件
使用Iterator接口遍历Collection
Git
SQL_Insert语句
发表于
分类于
MySQL
1 | -- 插入语句 |
SQL数据库级别外键
发表于
分类于
MySQL
1 | -- 学生表(从表)的gradeid字段 要去引用年级表(主表)的gradeid |
MySQL常用命令/数据表类型
1 | SHOW CREATE DATABASE school -- 查看创建数据库语句 |
SQL修改删除表
发表于
分类于
MySQL
数据表类型(MYISAM与INNODB)
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间大小 | 较小 | 较大,约为MYISAM两倍 |
常规使用操作:
- MYISAM节约空间,速度较快
- INNODB安全性高,支持事务处理,多表多用户操作
物理空间位置
所有数据库文件都存在data目录,一个文件夹一个数据库
本质是文件存储
MySQL引擎在物理文件区别
INNODB在数据库表中只有一个*.frm文件,以及上级目录下的ibdata1文件
MYISAM对应文件
- *.frm 表结构定义文件
- *.MYD 数据文件(Data)
- *.MYI 索引文件(Index)
设置数据库表的字符集编码
CHARSET=UTF8
不设置会是mysql默认字符集编码,不支持中文
在my.ini中配置默认编码
character-set-server=utf8
SQL创建表
发表于
分类于
MySQL
1 | SHOW CREATE TABLE `XXX` --查看某张表的创建语句 |
数据库字段属性
发表于
分类于
MySQL
1、Unsigned
- 表示无符号整数
- 当前列无法被声明为负数
2、zerofill
- 0填充
- 不足的位数,使用0填充
- 5 —> 005
3、自增
- 自动在上一条记录的基础+1
- 通常用来设计唯一主键,必须是整数类型
- 可以自定义增量
4、非空(null OR not null)
- 如为非空,必须赋值
- 否则若不赋值,默认是null(字符串除外)
- 空字符串不是null
5、默认(default)
如果不指定该列值,则值变为默认值