初识Collection
List系列集合:添加的元素是有序、可重复、有索引。
Set系列集合:添加的元素是无序、不重复、无索引。
Collection是单列集合的父接口,它的功能是全部单列集合都可以继承使用的。常见的方法:
//把给定的对象添加到当前集合中
public boolean add(E e)
//清空集合中所有元素
public void clear()
//把给定的对象在当前集合中删除
public boolean remove(E e)
//判断当前集合中是否包含给定的对象
public boolean contains(Object obj)
//判断当前集合是否为空
public boolean isEmpty()
//返回集合中元素的个数/集合的长度
public int size()
注:
1> Collection是一个接口,我们不能直接创建它的对象。所以在我们使用它的方法时,需要闯将其实现类的对象。实现类:ArrayList、LinkedList、Vector
2> 添加元素:在List系列集合中添加数据,方法返回值永远为true。但是在Set系列集合中添加数据,如果当前要添加的元素不存在,方法返回true,表示添加成功。如果当前要添加的元素已存在,方法返回false,表示添加失败(因为Set系列的集合不允许重复)。
3> 删除元素:因为Collection里面定义的是共性的方法没所以此时不能通过索引进行删除,只能通过元素的对象进行删除。删除成功返回true,失败返回false(要删除的元素不存在则会删除失败)。
4> 判断元素是否包含:底层是依赖equals方法进行判断是否存在,如果集合中存储的是自定义对象,也想通过contains方法来判断是否包含,那么在javabean类中,一定要重写equals方法。(Object类中的equals方法是依赖地址值进行判断)
Collection的遍历方式
1、迭代器遍历(迭代器不依赖索引):
Collection集合获取迭代器:
//返回迭代器对象,默认只想当前集合的0索引
Iterator<E> iterator()
Iterator中的常用方法
//判断当前位置是否有元素,有元素返回true,没有元素返回false
E.hasNext()
//获取当前位置的元素,并将迭代器对象移向下一个位置
E.next()
//删除当前位置的元素
E.remove()
例:
//创建集合添加元素
Collection<String> coll = new ArrayList();
coll.add("a");
coll.add("aa");
coll.add("aaa");
coll.add("aaaa");
//创建迭代器的对象,指针默认指向0索引处
Iterator<String> it = coll.iterator();
//遍历集合
while(it.hasNext()){
//获取元素,移动指针
String str = it.next();
System.out.print(str+" ");
}
//最终结果:a aa aaa aaaa
注:
1> 当迭代器指针已超出指向范围时,如果强行进行数据访问,则会抛出NoSuchElementException异常。
2> 迭代器遍历完毕,指针不会复位(如果要再次进行遍历,只能再次获取一个新的迭代器对象)。
3> 循环中只能用一次next方法
4> 迭代器遍历时,不能用集合的方法进行增加或者删除,可以用迭代器提供的remove方法进行删除。
2、增强for遍历:
1> 增强for遍历的底层就是迭代器,目的是为了简化迭代器的代码书写。
2> 它是JDK5之后出现的,其内部原理就是一个Iterator迭代器 。
3> 所有的单列集合和数组才能用增强for进行遍历。
例:
//创建集合并添加元素
Collection<String> coll = new ArrayList<>();
coll.add("zhangsan");
coll.add("lisi");
coll.add("wangwu");
//利用增强for进行遍历
//s是一个第三方变量,在循环的过程中依次表示集合中的每一个元素
for(String s : coll){
System.out.print(s+" ");
}
//运行结果:zhangsan lisi wangwu
//IDEA 快捷生成方式:coll.for
注:
1> 其中的s为第三方变量,修改增强for中的第三方变量,不会改变集合中原本的数据
3、Lambda表达式遍历:
//结合Lambda遍历集合
default void forEach(Consumer<? super T> action):
例:
//创建集合并添加元素
Collection<String> coll = new ArrayList<>();
coll.add("zhangsan");
coll.add("lisi");
coll.add("wangwu");
//利用匿名内部类的形式:
//forEach()底层原理:遍历集合依次得到每一个元素,并将得到的每一个元素传递给下面的accept方法
coll.forEach(new Consumer<String>(){
@override
//s依次表示集合中的每一个数据
public void accept(String s){
System.out.print(s+" ");
}
});
//利用Lambda表达式形式:
coll.forEach(s->System.out.print(s+" "));
//输出结果:zhangsan lisi wangwu
总结:
1> Collection是单列集合的顶层接口,所有方法被List和Set系列集合共享
2> 常见成员方法:add、clear、remove、contains、isEmpty、size
3> 三种通用的遍历方式:
迭代器:在便利的过程中需要删除元素,使用迭代器
增强for、Lambda:仅仅想遍历。使用增强for或Lambda表达式
List集合
1> 有序:存和取的元素顺序一致
2> 有索引:可以通过索引操作元素
3> 可重复:存储的元素可以重复
List集合的特有方法:
//在此集合中的指定位置插入指定的元素
void add(int index,E element)
//删除指定索引处的元素,返回被删除的元素
E remove(int index)
//修改指定索引处的元素,返回被修改的元素
E set(int index,E element)
//返回指定索引处的元素
E get(int index)
注:
1> 在集合中插入元素时,原来索引上的元素会依次往后移
2> 删除元素时,分为:
1、删除元素
2、通过索引删除
调用方法时,如果方法出现了重载,优先调用实参跟形参类型一致的方法。如果想删除整形类型的元素,需要将int类型的数据进行包箱形成Integer才能直接删除元素。
List集合的遍历方式
1、迭代器遍历(与Collection相同)
2、增强for遍历(与Collection相同)
3、Lambda表达式遍历(与Collection相同)
4、列表迭代器遍历
5、普通for循环(因为List集合存在索引)
//创建集合并添加元素
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
//迭代器
Iterator<String> it = list.iterator();
while(it.hasNext()){
String str = it.next();
System.out.print(str+" ");
}
//运行结果:aaa bbb ccc
//增强for
for(String s : list){
System.out.print(s+" ");
}
//运行结果:aaa bbb ccc
//Lambda表达式
list.forEach(s->System.out.print(s+" "));
//运行结果:aaa bbb ccc
//普通for循环
for(int i = 0;i < list.size(); i++){
String str = list.get(i);
System.out.print(str+" ");
}
//运行结果:aaa bbb ccc
//列表迭代器
//获取一个列表迭代器对象,默认指针指向0索引
//额外添加了一个方法:在遍历的过程中,可以添加元素
ListIterator<String> it = list.listIterator();
while(it.hasNext()){
String str = it.next();
if("bbb".equals(str)){
it.add("qqq")
}
System.out.print(str+" ");
}
//运行结果:aaa bbb qqq ccc
总结:
1> 在遍历过程中需要删除元素,使用迭代器
2> 在遍历的过程中需要添加元素,使用列表迭代器
3> 仅仅想遍历,使用增强for或Lambda表达式
4> 普通for:如果遍历的时候想操作索引,可以用普通for
未完待续~
觉得有用就点点赞吧!