JAVA API
什么是java api
java api: application interface 应用程序接口
-
JAVA API是java开发团队实现做好的类库
类库:就是一些java类的集合,是一些功能的集合 -
JAVA API狭义的理解就是java的方法
-
经常会有这样的说法:
调用api方法/调用api
常用的API
- String StringBuffer StringBuilder
- 封装类 Integer Float Double等八种
- Calendar 日历类
- Object类
- Math类 BigDecimal BigInteger
IO API
所有的输入输出流,文件操作
线程API
Thread类和Runable接口
线程池
Socket API
网络线程:tcp/ip编程
Socket类
ServerSocket类
集合API
- List集合
- Set集合
- Map集合
集合框架,把很多对象存储在一起.拥挤和的名称并同时使用集合的api,来操作集合中的数据
有了集合可以让数据的存储变得复杂,用对象可以存储不同类型的数据,把若干对象村塾在集合中
集合框架的分类
- List集合/数据结构:线性,数据内容无序,但数据的位置是有序的,位置从0开始
- Set集合/数据结构:非线性,数据的内容无序.位置也无序,但内容不能重合
- Map集合/数据结构:键值对 若干键值对组织在一起的数据
以上三种集合的使用
- 集合的初始有一个固定的大小,随着往集合中添加数据,集合的空间不够了,那么集合会自动扩容
- 可以给集合存储若干不同类型的数据
- 给集合存储完元素后,就可以操作集合的数据
- List:
>查找:有位置下标的数据,查找快
>没有位置下标的数据,查找的速度不一定
>增加:增加到集合的末尾,追加快,增加到集合的某一个位置,慢
>删除:有位置下标删除快,但数据移动慢
>修改:同查找
- Set
>查找:查找慢
>增加:慢,保证集合中的数据没有重复
>删除:先找后删,慢
>修改:慢
- Map
>查找:有key的数据查找快,没有key的数据查找慢(key表示一种标记)
>增加:慢,因为要保证所有的key不能重复
>删除:有key的删除快
>修改:
集合的继承结构
- Collection接口:
- List接口:
ArrayList类 ArrayList implement List
LinkedList类 LinkedList implement List
- Set接口
HashMap类 HashMap implement Map
HashTable类 HashTable implement Map
List集合
List是一个接口,接口中定义了规范,要使用这些接口就必须实现这个接口,并给接口的方法补上方法体
ArrayList类和LinkedList类都是List接口的子实现
ArrayList类有具体的下标,通过下标查询速度快,不适合做增和删.更适合做位置下标.
LinkedList类不适合做查询,更适合做增和删,适合做链表
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) 删除集合中的一个子集
- …等
集合空
- 集合对象为null 空 说明堆空间为空
- 集合对象不为null,但集合内容为空 即size()
set集合
- set集合中不能有重复的元素出现,所有的set集合中的元素,只能唯一,且没有顺序,能存储null,但线程不安全
- HashSet集合越小,遍历的速度和效率就越好
- TreeSet集合是要求集合中的数据排序,要求要存储的元素对象对应的类必须实现Comparable接口
Map集合
- 若干键值对数据组成的集合
- map集合中的所有的key(值)也是一个集合,是一个set集合,说明key不能重复
- map集合中所有的value(值)也是一个集合,是一个Collection集合,集合中的每一个元素是由key和value组成的,而value可以是Collection集合或map集合皆可,即集合套集合
- Map接口有两个子实现:HashMap和HashTable
HashMap可以存储null,线程不安全,.异步
HashTable不可以存储null,线程安全,同步
Map集合的应用场景广泛
原因:前提是能确定key值,就一定会快速的获取key对应的对象,很多的框架中的数据都是用Map集合存储的
想Spring框架,Springmvc框架,Strutcts框架,mybatis框架,Tomcat框架,redis框架等…
map的集合只能通过put方式添加集合元素(键值对),存储完后,会把所有的key构成一个Set集合,此Set集合只能读取,不能添加,同理所有的value组成的集合只能读取,不能添加
***从map集合中取出集合的数据有三种方式:
- 一次取出一个键值对
- 县取出所有的key然后循环遍历key,根据key来取出value
- 直接取出所有的value,进行遍历,找到合适的value即可
集合套集合
解决了更复杂的数据结构的问题
例:
ArrayList<List> all=new ArrayList<List>();
ArrayList<Collection> all=new ArrayList<Collection>();
ArrayList<Map<String,List<Collection>>> all=new ArrayList<Map<String.List<Collection>>>();
HashMap<String,Collection> all=new HashMap<String,Collection>();
HashMap<String,Map<String,Collection>> all=new HashMap<String,Map<String,Collection>>();
集合迭代器
迭代 等价理解为 循环 等价理解为 遍历
- 集合中的迭代,主要用途就是遍历集合中的元素
- 把list集合,和set集合,map集合都转换成结合的迭代
- 集合迭代的本质,就是把所有的集合的遍历方式转换成迭代器这一种遍历方式
实现步骤
- List集合转换成迭代器集合,用迭代器api方法来迭代数据
- Set集合转换成迭代器集合,用迭代器api方法来迭代数据
- Map集合转换成迭代器集合,用迭代器api方法来迭代数据
public class IteratorService {
public List<Person> getPerson_List(){
/**
* 获取一个List对象的集合
*/
List<Person> list=new ArrayList<Person>();
Student stu1=new Student("张三",20,"S001");
Student stu2=new Student("李四",21,"S002");
Student stu3=new Student("王五",22,"S003");
Student stu4=new Student("张五",20,"S001");
Teacher tea1=new Teacher("赵六",23,10000);
Teacher tea2=new Teacher("田七",30,20000);
list.add(stu1);
list.add(stu2);
list.add(stu3);
list.add(stu4);
list.add(tea1);
list.add(tea2);
return list;
}
public Set<Person> getPerson_Set(){
/**
* 获取一个Set对象的集合
*/
Set<Person> set=new HashSet<Person>();
Student stu1=new Student("张三",20,"S001");
Student stu2=new Student("李四",21,"S002");
Student stu3=new Student("王五",22,"S003");
Student stu4=new Student("张五",20,"S001");
Teacher tea1=new Teacher("赵六",23,10000);
Teacher tea2=new Teacher("田七",30,20000);
set.add(stu1);
set.add(stu2);
set.add(stu3);
set.add(stu4);
set.add(tea1);
set.add(tea2);
return set;
}
public Map<String,Person> getPerson_Map(){
/**
* 获取一个Map对象的集合
*/
Map<String,Person> map=new HashMap<String,Person>();
Student stu1=new Student("张三",20,"S001");
Student stu2=new Student("李四",21,"S002");
Student stu3=new Student("王五",22,"S003");
Student stu4=new Student("张五",20,"S001");
Teacher tea1=new Teacher("赵六",23,10000);
Teacher tea2=new Teacher("田七",30,20000);
map.put(stu1.getName(), stu1);
map.put(stu2.getName(), stu2);
map.put(stu3.getName(), stu3);
map.put(stu4.getName(), stu4);
map.put(tea1.getName(), tea1);
map.put(tea2.getName(), tea2);
return map;
}
/**
* 把List集合转换成iterator迭代器
* 用迭代器的方式迭代数据
*/
public void iterator_List(){
List<Person> list=this.getPerson_List();
Iterator<Person> it=list.iterator();//把List集合转化成迭代器集合
while(it.hasNext()){
/**
*
* it.next(),只是判断是否有下一个数据
* 如果有下一个数据,就取出下一个数据
*/
Person p=it.next();
//继续根据具体的业务逻辑去获取p对象中的数据
CommonPerson cp=(CommonPerson)p;
System.out.println("name="+cp.getName()+" age="+cp.getAge());
}
}
/**
* 把Set集合转换成iterator迭代器
* 用迭代器的方式迭代数据
*/
public void iterator_Set(){
Set<Person> set=this.getPerson_Set();
Iterator<Person> it=set.iterator();//把Set集合转化成迭代器集合
while(it.hasNext()){
/**
*
* it.next(),只是判断是否有下一个数据
* 如果有下一个数据,就取出下一个数据
*/
Person p=it.next();
//继续根据具体的业务逻辑去获取p对象中的数据
CommonPerson cp=(CommonPerson)p;
System.out.println("name="+cp.getName()+" age="+cp.getAge());
}
}
/**
* 把Map集合转换成iterator迭代器
* 用迭代器的方式迭代数据
*/
public void iterator_Map(){
Map<String,Person> map=this.getPerson_Map();
Iterator<Person> it=map.values().iterator();//把map集合的所有的value转化成迭代器集合
while(it.hasNext()){
/**
*
* it.next(),只是判断是否有下一个数据
* 如果有下一个数据,就取出下一个数据
*/
Person p=it.next();
//继续根据具体的业务逻辑去获取p对象中的数据
CommonPerson cp=(CommonPerson)p;
System.out.println("name="+cp.getName()+" age="+cp.getAge());
}
}
}