1.容器类
初步了解容器后,我们来讲讲容器类,又被称作集合框架.
首先我们来认识一下常见的两种容器体系
集合框架的简单体系如下:
- Collection 存储单个数据的容器体系,它也是容器体系的上层接口,其下有两个子接口:
1.Set 没有顺序,不可重复 2.List 有顺序,可以重复
- Map 键值对形式数据的容器体系
2.Collection
我们来具体尝试下collection中的一些常用方法
首先我们新建类在main的主方法中new一个collection对象
Collection col=new ArrayList();
//以此对象使用其中的方法
1.add 添加
col.add(123);
col.add("哈哈");
col.add(false);
col.add('c');
容器可以存储多个数据类型,不同于数组
2.size 返回容器大小
System.out.println(col.size());
即返回容器里存储的数据数量
3.remove 移除
col.remove(123);
System.out.println(col);
会移除容器中的数据(123)
4.iterator 遍历
Iterator it=col.iterator();
//2.判断是否存在下一个元素
while(it.hasNext()){
//3.获取元素
System.out.println(it.next()); //获取下一个元素
}
遍历输出容器里全部数据
还有一些方法感兴趣的同学也可以自己尝试一下
3.List接口
list作为子接口,有序(索引)可重复,新增了一些根据索引操作的方法
接下来展示方法实际中的应用
public class ListDemo01 {
public static void main(String[] args) {
//添加泛型 增可读性
List<Integer> ls=new ArrayList();
//存储班级学生分数
ls.add(2);
ls.add(0);
ls.add(1);
ls.add(4);
ls.add(3);
System.out.println(ls);
//add(index, element) 添加
ls.add(3, 3);
System.out.println(ls);
//E set(int index, E element) 修改
ls.set(5, 5);
System.out.println(ls);
// E get(int index) 获取
System.out.println(ls.get(2));
// E remove(int index)
//当容器中的数据也是整数时候,以索引为主
//下课测试,如果出现多个相同的值,移出时候删除多个,还是第一个
System.out.println(ls.remove(2));
System.out.println(ls);
//List<E> subList(int fromIndex, int toIndex) 不包含结束索引
System.out.println(ls.subList(1, 4));
System.out.println(Arrays.toString(ls.toArray()));
System.out.println(ls.toArray()[1]);
//普通for
for(int i=0;i<=ls.size()-1;i++){
System.out.println(ls.get(i));
}
}
}
4.ArrayList
ArrayList是List的子类,它与HashSet相反,允许存放重复元素,因此有序.
ArrayList的底层实现是由可变数组(通过一些方法)实现的,通过数组拷贝实现容器可以根据内容进行动态扩容;
ArrayList的优点是遍历和获取的效率高,因为我们可以根据索引直接定位到我们需要的元素;
ArrayList的缺点是增删的效率低;
当ArrayList的容量不足以继续存放对象时,会自动的扩容,每次扩容原先容器大小的1.5倍;
ArrayList可以使用多态
在单线程环境下,在大量做查询的业务下,适合使用ArrayList
5.在定义一个容器时为什么使用泛型
在JDK1.4之前类型不明确:
装入集合的类型都被当做Object对待,从而失去自己的实际类型.从集合中取出时往往需要转型,效率低,容易产生错误.
- 使用泛型之后可以增强程序的可读性和稳定性.
- 使用泛型,保留了容器中元素的类型,安全省心的使用容器.