Java中的单列集合体系结构(一)

初识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

未完待续~

觉得有用就点点赞吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值