集合——Collection&List
文章目录
前言
我们现在所学习的Java是一种面向对象的语言,集合是重要的一部分,当我们对多个对象进行操作时,数组时不能满足其要求的,因为数组的长度是固定的,不能对多个对象进行存储,这时,就会用到我们的集合。
一、Collection集合
1.集合的体系结构
集合类的特点
提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变,存储的任何数据都是泛型。
Collection集合概述:
①是单例集合的顶层接口,它表示一组对象,这些对象也称Collection的元素。
②JDK不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现
创建Collection集合的对象:
采用多态的方式
具体实现类ArrayList
2.Collection集合的常用方法
3.Collection集合的遍历
迭代器是集合专用的遍历方法
Iterator iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到。
Iterator常用的方法:
E next() 返回迭代中的下一个元素。
boolean hasNext() 如果迭代具有更多元素,则返回 true 。
public class IteratorDemo {
public static void main(String[] args) {
//创建集合对象
Collection<String> c = new ArrayList<>();
//添加元素
c.add("zhang");
c.add("chen");
c.add("wang");
//Iterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到
Iterator<String> it = c.iterator();
//用while循环改进元素的判断和获取
while (it.hasNext()) {
String s = it.next();
System.out.println(s);
}
}
}
二、List集合
List集合概述
①有序集合(也称序列),用户可以精确控制列表中每一个元素的插入位置,用户可以通过整数索引访问元素。
②与 list集合不同,列表通常允许重复的元素。
List集合特点:
有索引
有序:储存和取出的元素顺序一致
可重复;存储的元素可重复
1.List集合的特有方法
2.List集合的遍历方式
①迭代器:集合特有的遍历方式
② 普通for循环:带有索引的遍历方式
③增强for循环:最方便的遍历方式
定义格式:
for(元素数据类型 变量名 : 数组/集合对象名) {
循环体;
}
//迭代器:集合特有的遍历方式
Iterator<Student> it= list.iterator();
while(it.hasNext()){
Student s = it.next();
System.out.println(s.getName()+","+s.getAge());
}
System.out.println("---------");
//普通for循环:带有索引的遍历方式
for(int i=0;i<list.size();i++) {
Student s = list.get(i);
System.out.println(s.getName()+","+s.getAge());
}
System.out.println("---------");
//增强for循环:最方便的遍历方式
for(Student s: list){
System.out.println(s.getName()+","+s.getAge());
}
3.并发修改异常
并发修改异常
ConcurrentModificationException:当不允许这样的修改时,可以通过检测到对象的并发修改的方法来抛出此异常。
造成原因:
迭代器在便利的过程中,通过集合对象修改了集合元素,造成了迭代器获取元素中判断预期修改值与实际修改值不一致。
解决方案:
用for循环遍历,然后用集合对象做对应的操作即可。
public class ListDemo {
public static void main(String[] args) {
//创建集合对象
List<String> list=new ArrayList<String>();
//添加元素
list.add("hello");
list.add("world");
list.add("java");
//遍历集合,得到每一个元素,看有没有"world"元素,如果有,就添加一个"javaee"元素,请写代码实现
// Iterator<String> it=list.iterator();
// while(it.hasNext()){
// String s = it.next();在通过迭代器时每次都要判断预期修改集合的次数(expectedModCount)和实际修改集合的次数(modCount)
// if(s.equals("world")){
// list.add("javaee");
// }
// }
for(int i=0;i< list.size();i++){
String s = list.get(i);
if(s.equals("world")){
list.add("javaee");
}
}
//输出集合对象
System.out.println(list);
}
}
ListIterator:列表迭代器
通过List集合的listIterator()方法得到,所以说它是list集合特有的迭代器
用于允许程序员沿任一方向遍历列表的列表的迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置。
//通过List集合的listIterator()方法得到
ListIterator<String> lit=list.listIterator();
while(lit.hasNext()){
String s = lit.next();
System.out.println(s);
}
4.集合的实现类
集合有两个实现类,ArrayList和LinkedList。
ArrayList:底层数据结构是数组,查询快,增删慢。
LinkedList:底层数据结构是链表,查询慢,增删快。
5.LinkedList集合的特有方法
