容器的特征:①数据长度可变;②数据保存方式不同。
集合体系概述:JAVA的集合框架是由很多接口、抽象类、具体类组成。都位于java.util包中。
Java中集合类中默认可以存储任意数据类型,Java中的集合提供泛型机制,在定义时最好为集合提供一个明确的类型。(存在转型问题)
List接口及实现类
①ArrayList:
长度可变的数组;
在内存中分配连续的内存空间;
遍历元素和查询元素效率较高。
方法:
boolean add(E e);
容器末尾添加元素,若容器已满,则对容器进行扩容处理,新容量是原来的1.5倍,数组复制,创建新数组。
void add(int index,E e);容器指定位置添加元素
boolean addall(Collection<? extends E>c);添加单列集合
void clear();清空容器;
boolean contains(Object o);判断是否包含指定元素;
E get(int index);返回列表指定位置元素;
int indexOf(Object o);返回o首次出现位置索引
boolean isEmpty();返回容器是否为空
int lastIndexOf(Object o);返回容器出现o最后一次索引
②LinkedList:
链表存储方式(内存位置随机分配);
插入、删除元素效率较高;
查询效率较低。(需遍历容器)
③Vector:
底层实现是数组,但线程安全
List接口集合迭代
①for循环遍历(缺点:删除元素时下一个元素会自动跑到被删除元素位置)
②增强for循环遍历(缺点:不允许在集合里删除元素)
③迭代器遍历
④listIterator
迭代器遍历
获得迭代器对象
Iterator<String>iterator=list.iterator();
使用迭代器遍历容器
java
package ColleationDemo;
import java.util.ArrayList;
import java.util.Iterator;
public class List {
public static void main(String[] args) {
ArrayList<String> arr=new ArrayList<>();
arr.add("a");
arr.add("b");
arr.add("d");
arr.add("r");
arr.add("a");
arr.add("l");
Iterator<String>it=arr.iterator();
while(it.hasNext())
{
String s= it.next();
System.out.println(s);
}
}
}
注意:删除时使用迭代器中的remove(iterator.remove());
listIterator(注:需满足list接口的集合类)
方法:
hasnext()
next()
previous()
hasPrevious()
hasPrevious(int index)