Collection集合
ArrayList
使用步骤:
创建集合对象
添加元素
遍历集合
集合体系结构:
由于不同的数据结构(数据的组织,存储方式),所以java为我们提供了不同的集合,
但是不同的集合他们的功能都是相似的,不断的向上提取,将共性抽取出来,这就是集合体系
结构形成的原因。
体系结构:
怎么学习?最顶层开始学习,因为最顶层包含了所有的共性
怎么使用?使用最底层,因为最低层就是具体的实现
Collection:
Collection层次结构中的根接口,不能实例化,需要使用子类对象
boolean add(E e): //添加元素
void clear(): //清空集合
boolean contains(Object o): //判断集合中是否包含指定元素
boolean equals(Object o):
boolean isEmpty()://是否为空
boolean remove(Object o)://删除元素 删除成功返回true
int size()://返回集合的长度
Object[] toArray()://将集合转换成一个Object类型的数组
集合的遍历方式
1.toArray()
可以把集合转换成数组,然后遍历数组即可
2.iterator()
可以返回一个迭代器对象,我们可以通过迭代器对象来迭代集合
Iterator:可以用于遍历集合
E next():返回下一个元素
boolean hasNext():判断是否有元素可以获取
需求:
判断集合中是否包含元素java,如果有则添加元素android
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>();
al.add("java");
al.add("hello");
al.add("world");
boolean flag = false;
for (String string : al) {
if(string.contains("java")) {
flag = true;
}
}
if(flag) {
al.add("android");
}
System.out.println(al);
}
使用增强for直接对集合进行操作报异常.
遍历集合在迭代器中操作集合抛出该异常.
Exception in thread "main" java.util.ConcurrentModificationException:并发修改异常
迭代器是依赖于集合的,相当于集合的一个副本,当迭代器在操作的时候,如果发现和集合
不一样,则抛出异常
解决方案:
不使用迭代器进行修改
在使用迭代器进行遍历的时候使用迭代器进行修改
使用集合存储自定义对象并遍历:
由于集合可以存储任意类型的对象,当我们存储了不同类型的对象,就有可能在转换的时候出现类型转换异常
所以java为了解决这个问题,给我们提供了一种机制,叫做泛型
泛型:是一种广泛的类型,把明确数据类型的工作提前到了编译时期,借鉴了数组的特点
泛型好处:
避免了类型转换的问题
可以减少黄色警告线
可以简化我们代码的书写
什么时候可以使用呢?
问API,当我们看到<E>,就可以使用泛型了
for each:
增强for循环,一般用于遍历集合或者数组
格式:
for(元素的类型 变量 : 集合或者数组对象){
可以直接使用变量;
}
注意:
在增强for循环中不能修改集合,否则会出现并发修改异常
数组的特点:查询块,增删慢。
链表:查询慢,增删块
有链子连接起来的一堆结点
结点:
地址值,值,下一个节点地址值
如何获取节点?
只能遍历链表,然后一个一个查看
栈:先进后出
队列:先进先出
Collection的子体系List:
有序(存储和读取的顺序是一致的)
有整数索引
允许重复
List的特有功能:
void add(int index , E element):在指定索引位置添加元素
E get(int index):根据索引返回元素
E remove(int index):根据索引删除元素并返回
E set(int index,E element):根据索引修改元素,并将修改前的元素返回.
//增删改查
List的常用子类:
ArrayList:
底层是数组结构,查询块,增删慢
LinkList:
底层结构是链表,查询慢,增删快
如何选择使用不同的集合?
如果查询多,增删少,使用ArrayList
如果相反,则使用LinkList
如果不知道使用什么,则使用ArrayList
LinkList:
void addFirst():将元素添加到索引为零的位置
void addLast():将元素添加到索引为size()-1的位置
E getFirst():获取索引为0的元素
E getLast():获取索引为size()-1的元素
E removeFirst():将元素为0的元素删掉并返回
E removeLast():将元素为size(0-1的元素删除并返回 |
|