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集合/数据结构:键值对 若干键值对组织在一起的数据

以上三种集合的使用

  1. 集合的初始有一个固定的大小,随着往集合中添加数据,集合的空间不够了,那么集合会自动扩容
  2. 可以给集合存储若干不同类型的数据
  3. 给集合存储完元素后,就可以操作集合的数据
    - List:
    >查找:有位置下标的数据,查找快
    >没有位置下标的数据,查找的速度不一定
    >增加:增加到集合的末尾,追加快,增加到集合的某一个位置,慢
    >删除:有位置下标删除快,但数据移动慢
    >修改:同查找
    - Set
    >查找:查找慢
    >增加:慢,保证集合中的数据没有重复
    >删除:先找后删,慢
    >修改:慢
    - Map
    >查找:有key的数据查找快,没有key的数据查找慢(key表示一种标记)
    >增加:慢,因为要保证所有的key不能重复
    >删除:有key的删除快
    >修改:

集合的继承结构

  • Collection接口:
  1. List接口:
	ArrayList类	ArrayList implement List
	LinkedList类	LinkedList implement List
  1. 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集合中取出集合的数据有三种方式:

  1. 一次取出一个键值对
  2. 县取出所有的key然后循环遍历key,根据key来取出value
  3. 直接取出所有的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());
			
		}
	}
}

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值