为什么使用集合框架
存储一个班学员信息,假如一个班容纳20名学员,可以用对象数组存储,如果对象数目不确定,用数组储存就有问题。
如果并不知道程序运行时需要多少对象,或者需要更复杂方式存储对象可以使用Java集合框架。
Java集合框架包含的内容
位于:java.util包中
接口
Collection接口:
Collection接口存储一组不唯一、无序的对象
List接口存储一组不唯一、有序(插入顺序)的对象,类似数组
Set接口存储一组唯一、无序的对象
map接口
Map接口存储一组键值对象,提供key到value的映射
List接口的实现类
特点:有序可重复
ArrayList类
ArrayList实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高
add(Object object)添加元素
remove(int index)删除元素
set(int index ,Object object)修改元素
get(int index)获取元素
size()集合大小
contains(Object object)判断元素是否包含
toArray()转换成数组
clear()清空集合
LinkedList实现类
LinkedList采用链表存储结构,插入、删除元素时效率比较高
LinkedList的常用方法与ArrayList的基本一致。
实例:
//List接口 ArrayList 实现类
//数组结构 有序 可以重复 长度可变
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ArrayListDome {
public static void main(String[] args) {
List ls= new ArrayList();
Dog d1=new Dog("阿伟", "金毛");
Dog d2=new Dog("小杨", "泰迪");
Dog d3=new Dog("阿翔", "金毛");
Dog d4=new Dog("阿毛", "金毛");
Penguin p1=new Penguin("小黑", "Q仔");
//添加
ls.add(d1);
ls.add(d2);
ls.add(d3);
// ls.add(p1);
System.out.println("元素个数:"+ls.size());
//删除
// ls.remove(2);
//清空
// ls.clear();
//修改
ls.set(1, d4);
//判断是否存在
if (ls.contains(d1)) {
System.out.println("存在");
}else {
System.out.println("不存在");
}
//遍历元素1
for (int i = 0; i < ls.size(); i++) {
//判断是那种类型
if (ls.get(i) instanceof Dog) {
Dog dog =(Dog) ls.get(i);
dog.show();
}else if(ls.get(i) instanceof Penguin){
Penguin pe=(Penguin)ls.get(i);
pe.show();
}
}
运行结果:
集合的遍历方法
- Foreach循环(增强for循环)
//增强foreach(推荐)
System.out.println("*******增强foreach ********");
for (Object object : ls ) {
if (object instanceof Dog) {
Dog dog =(Dog)object;
dog.show();
}else if (object instanceof Penguin) {
Penguin pe=(Penguin)object;
pe.show();
}
}
- ArrayList转换成数组(使用toArray ()方法)
//转换成数组
System.out.println("*******转换成数组 ********");
Object[] obj=ls.toArray();
for (int i = 0; i < obj.length; i++) {
if (obj[i] instanceof Dog) {
Dog dog =(Dog)obj[i];
dog.show();
}else if (obj[i] instanceof Penguin) {
Penguin pe=(Penguin)obj[i];
pe.show();
}
}
- 与迭代器遍历数组(数组中的类型要一致)
//迭代器
System.out.println("*******迭代器********");
Iterator it=ls.iterator();
while (it.hasNext()) {
Dog dog=(Dog)it.next();
dog.show();
}