今天主要是概述java集合的知识点
文章目录
一、集合的论述
1、集合的定义
集合也是一个容器,用于存数据
2、 数组与集合
相同点:
- 都用来存数据, 都可以通过索引来获取数据
- 都采用数组的方法来进行存的
不同点:
- 数组可以存基本数据类型,也可以存引用数据类型
集合只能够存引用数据类型 - 数组的长度是固定的,集合的长度是可变的
二、Collection
1、Collection定义
Collection 层次结构 中的根接口 索引也是从0开始
2、 Collection常用的方法
1、常规的一些方法:
boolean add(E e) 添加,返回值是bealoon 添加成功返回true
boolean contains(Object o) 判断是否有此元素 如果存在返回true, 否则false。 *System.out.println(col.contains("苍老师"))*
boolean isEmpty() 判断集合里是否有元素
boolean remove(Object o) 根据集合里的元素进行删除((ArrayList) col).remove(1)
int size() 获取到集合的长度
Object[] toArray() 把集合转换成数组
void clear() 清空数组里的所有的元素
iterator() 把集合转换成迭代器的方法
2、所有带All 的方法:
- addAll(Collection<? extends E> c) 把小集合添加到大集合里, 例如: co.addAll©; 把集合 c的所有数据添加到co
- boolean containsAll(Collection<?> c) 如果此 collection 包含指定 collection 中的所有元素,则返回 true。
- removeAll(Collection<?> c) 返回值:如果存在交集返回 是true , 返回的是没有较交集的数据,co.remove© co里删掉c的全部元素
- retainAll(Collection<?> c) 返回值 判断是否发生该变,如果发生该变返回true,不发生该变返回false 取出来的是交集的结果。
3、如何对集合来进行遍历:
1、 for循环
Collection col = new ArrayList(); //这是一个集合
col.add(3);
col.add(student1);
col.add(student2);
col.add(student3);
col.add(student4); //往里面添加数据
for (int i=0;i<col.size();i++){
col.get(i);
} //for循环往里面取数据
2、增强for 循环
for(Object obj:col){
//把obj对象转换成Student对象
Student s = (Student)obj; //向上转型,去取得da类里面的Name,age值,也就是成员变量的值
System.out.println(s.getName()+"\t"+s.getAge());
}
3、 使用迭代器来进行遍历
增强for 循环的底层也是使用迭代器来实现,也是通过指针.
Iterator : 是一个接口,不能够被实例化
常规的方法: hasNext() 判断是否有下一个元素, 如果有返回true
// 如果需要第一个对象
//取数据
Object obj = ite.next();
Student s =(Student) obj;
Iterator ite = col.iterator() ;//把集合转换成迭代器,col是一个集合,iterator() 迭代器的方法,用迭代器必须要有这个
while (ite.hasNext())
{
System.out.println(((Student)ite.next()).getName()+"\t"+((Student)ite.next()).getAge());
// 上面一行也就是下面的一行
Student s =(Student) ite.next();
System.out.println(s.getName()+"\t"+s.getAge());
}
迭代器的内存图:
List: 导包 java.util 是一个接口
3、List
导包 java.util 是一个接口,是Collection的一个子接口
List list=new ArrayList();
特点:1. 有顺序 2. 有索引 3.可以重复
List集合常规独有的一些方法:
public void add(int index, E element) 根据索引的位置来进行添加
E get(int index) 根据索引来获取其值
E remove(int index) 根据索引来进行删除
E set(int index, E element) 也是替换 (前提这个已经存在)
总结: 这个方法都是根据索引来进行操作的
迭代器遍历报错: java.util.ConcurrentModificationException 对象的并发修改
对策:
ListIterator iter=list.listIterator(); 也就是把list集合转换成迭代器 否则无法遍历
ListIterator 这个迭代器是针对 list 集合而存在, 它的父类也是Iterator
List list=new ArrayList(); //就是把list集合转换成迭代器 否则无法遍历
ListIterator iter=list.listIterator();
while(iter.hasNext()){
String str= (String)iter.next();
if (Str.equals("ta")){
list.add("san); //还是要在集合里面添加
}
}