2019.07.13(day12)
api:
application interface:应用程序接口
是java开发团队事先做好的类库
(类库:就是一些java类的集合,一些功能的集合)
狭义的理解就是java方法
(调用api/调用api方法)
常用的api:
-String
StringBuffer StringBuilder
-封装类:
Integer Float Double等八种
-Calendar 日历类
-Object类
-Math类
BigDecimal BigInteger
-集合api:
List集合 Set集合 Map集合
-IO api:
所有的输入输出流,文件操作
线程api:
Thread类和Runnable接口 线程池
socket api:
网络编程:tcp/ip编程
Socket类
ServerSocket
集合api:
集合框架,把多个对象存储在一起,用集合的名称使用集合的api,来操作集合中的数据。
有了集合可以让数据的存储变得很复杂
(用对象存储不同类型的数据,然后把多个对象存储在集合中。)
集合框架的分类:
List集合/数据结构:
线性,数据内容无序,但数据的位置是有序的,位置从零开始
查找:有位置下标的数据查找快,没有位置下标的数据查找的速度不一定
增加:增加到集合的尾部,速度快,增加到集合的某一个位置,速度慢
删除:有位置下标,删除快,移动数据慢
Set集合/数据结构:
非线性,数据的内容无序,位置也无序,但是内容不能重复
查找:查找速度慢
增加:增加速度慢,要保证数据是没有重复的
删除:先找后删,速度慢
Map集合/数据结构:
键值对,若干键值对组织在一起的数据
查找:有key的数据查找快,没有key的数据查找的速度不一定
增加:增加速度慢,因为要保证所有的key不能重复
删除:又key的数据删除快,没有key的数据删除慢
以上三种集合:
1.集合的初始都有一个固定的大小,随着往集合中添加数据,集合的空间不够,集合会自动扩容
2.可以给集合存储若干不同类型的数据
3.给集合存储完数据之后,就可以操作集合中的数据
4.集合空
集合对象为null,空
集合对象不为null,但集合内容为空,size=0
集合的继承结构:
collection接口:
List接口:
ArrayList类 ArrayList implements List
(有具体的下标,通过下标查询速度快,不适合做增和删)
LinkedList类 LinkedList implements List
(不适合做查询,更适合做增和删)
Set接口:
HashSet类 HashSet implements Set
TreeSet类 TestSet implements Set
Map接口:
HashMap类 HashMap implements Map
Hashtable类 Hashtable implements Map
List集合常用的api:
boolean add(Object) 给集合添加元素
int size() 获取集合中的元素的个数
Object get(int) 从集合中获取指定下标位置的元素
void clear() 清除集合中的所有元素
boolean isEmpty() 判断集合是否为空
List subList(int,int) 从起始索引到终止索引,包括头,不包含尾
void remove(int) 删除指定索引位置的对象
void remove(Object) 删除指定的对象
void remove(Collection) 删除集合中的一个子集
...等
ArrayList特点:
-理解为可变数组
-可以存储数据
-下标位置有序,内容无序
-线程异步,速度快,不安全
-实现自List接口
ArrayList可变数组是如何实现动态扩容的?扩容的原则是什么?
申请一个更大的空间
新数组=Array.copyOf(原数组,新数组的长度)
ArrayList集合不适合存储量的数据
空间增长规律:
jre1.6及以下 old*3/2+1
jre1.7及以上 old+old>>1(右移一位)
Vector特点:
-用法和ArrayList一样
-实现自List接口
-可以存储null
-下标有序,内容无序
-线程同步,速度慢,安全