集合:
数据结构(数据的组织方式和存储方式)不同导致了集合的不同
不同的集合向上抽取最终获得一个Collection集合
单列集合:
collection
List接口 Set接口
ArrayList LinkedList HashSet LinkedHashSet
双列集合:
Map
HashMap LinkedHashMap
集合的clone()方法,产生的集合副本传入一个Object类中,然后输出的话就是按照[,]的格式输出,输出的方式和集合相同
collection集合的常用方法
1.添加 boolean add(E e);
2.删除 boolean remove(Object obj);
3.清空 void clear();
4.是否包含 boolean contains(Object obj);
5.是否为空 boolean isEmpty();
6.求集合大小 int size();
7.将集合转化为数组 Object[] toArray();
集合的遍历方式:
1.转化成数组遍历
2.用迭代器Iterator
Iterator迭代器:
使用方式:
Iterator<E> it = 集合名.itrator();
(如果集合里用的是基础类型,这个<E>可以省略)
Iterator的方法:
boolean hasnext();
迭代器是否还有下一个元素
Object next();
迭代器下一个元素值
迭代器相当于集合的一个副本,当迭代期间发现与集合不同就会抛出异常
Iterator的优缺点:
优点:方便使用
缺点:迭代期间不能进行增删操作,否则会产生异常(指针出现错误)
所以解决方法:
1.不使用Iterator,而是使用ListIterator,并使用ListIterator的add方法
因为ListIterator和Iterator不同,他有n+1个指针出现的位置(Iterator有n个),允许进行遍历,迭代期间修改列表并获得迭代器在列表中的当前位置。
2.老老实实用if
泛型:
将数据类型在编译期间就确定好的引用类型
增强for
格式:
for(数据类型 变量名: 集合名){
}
注意:增强for使用期间不能进行增删操作,因为for实现的底层是迭代器
链表:next指针
特点:查询慢,增删快(直接将下一个值的指针指向其他位置就好了)
栈和队列:栈是先进后出,队列是先进先出
特点:查询快,增删慢
List特点:
1.有序(存储的位置和读取的顺序是一致的)
2.有整数类型的索引(从0开始)
3.允许有重复
特有的功能(因为继承自Collection接口所以有自己的实现(虽然自己本身也是接口))
1.添加元素 void add(int index,E element);(注意和Collection的不同,这个返回值是void,并且有索引)
2.根据索引返回指定位置的元素 E get(int index);
3.移除指定索引处的元素 E remove(int index);
4.修改指定位置的元素 E set(int index,E element);
注意返回值类型
ArrayList和LinkedList的区别:
ArrayList底层是数组,查询快,增删慢(只需要指定索引就能查询,但是增删需要遍历)
LinkedList底层是链表,查询慢,增删快(只需要改变指针的位置就能增删,但是查询就只能遍历)
LinkedList的特有功能
1.添加
void addFirst(E e);在列表开头添加元素
void addLast(E e);在列表尾部添加元素
2.查询
E getFirst();查询列表开头的元素
E getLast();查询列表尾部的元素
3.删除
E removeFirst();删除列表开头的元素
E removeLast();删除列表尾部的元素
注意返回值,查询返回值是E正常,但是删除返回值也是E