集合体系结构;Collection单列集合的常用方法;集合的专用遍历方式:迭代器遍历和增强for循环;List集合的实现类

本文详细介绍了Java集合框架中Collection接口的基础概念,包括数组与集合的区别,以及常用的List(ArrayList, LinkedList)和Set(HashSet, TreeSet)集合的特性、方法和遍历技巧。重点讲解了添加、删除元素和特殊遍历方式,如迭代器和增强for循环的应用。

1. 集合的体系结构

集合与数组的区别:

  • 数组的长度是不可变的,集合的长度是可变的
  • 数组可以存基本数据类型和引用数据类型
  • 集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类

集合体系结构图:

2. Collection集合常用方法

Collection集合是单列集合的顶层接口,可以分为 list(可以存储重复元素)和 set(存储元素不可以重复)集合,list 和 set 也是接口类。

Collection集合的实现类:ArrayList(底层为数组)、LinkedList(底层为双链表)、HashSet(底层为哈希表)、TreeSet(底层为红黑树)

Collection集合常用方法:

方法名说明
boolean add(E e)添加元素
boolean remove(Object o)从集合中移除指定的元素
boolean removeIf(Object o)根据条件进行移除
void clear()清空集合中的元素
boolean contains(Object o)判断集合中是否存在指定的元素
boolean isEmpty()判断集合是否为空
int size()集合的长度,也就是集合中元素的个数

示例代码:

public static void main(String[] args) {
        //多态方式创建list集合
        List<String > list1 = new ArrayList<>();
        Collection<String> list2 = new ArrayList<>();
        //直接创建list对象
        ArrayList<String> list = new ArrayList<>();
        //添加元素
        list.add("林黛玉");
        list.add("薛宝钗");
        list.add("王熙凤");
        //集合的父类有重写toString()方法
        System.out.println(list);//[林黛玉, 薛宝钗, 王熙凤]
        //从集合中移除指定的元素
        list.remove("王熙凤");
        System.out.println(list);
        list.add("李逵");
        System.out.println(list);//[林黛玉, 薛宝钗, 李逵]
        //根据条件进行移除
        list.removeIf(
                (String s) -> {
                    return s.length() == 2;
                });
        System.out.println(list);//[林黛玉, 薛宝钗]
    }

3. Collection集合特殊遍历方法

3.1 迭代器遍历

迭代器 Iterato 是集合的专用遍历方式

Iterator<E> iterator():返回集合的迭代器对象,该迭代器对象默认指向当前集合的0索引

迭代器对象的常用方法:

  • boolean hasNext( ):判断当前指向位置是否有元素可以被取出 ​
  • E next( ):获取当前位置的元素,并将迭代器对象指向下一个索引位置

使用迭代器遍历集合:

public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("穷且益坚,不坠青云志");
        list.add("老当益壮,宁移白首之心");
        list.add("老骥伏枥,志在千里");
        list.add("落霞与孤鹜齐飞,秋水共长天一色");
        list.add("但愿人长久,千里共婵娟");

        //获得list集合的迭代器对象it,指向list集合的索引0位置
        Iterator<String> it = list.iterator();

        //使用迭代器遍历集合
        while (it.hasNext()){//当前位置是否有元素可以被取出
           
            String str = it.next();//取出当前位置元素,将迭代器指向向后移一位
            System.out.println(str);
        }
    }

void remove( ):从底层集合移除此迭代器返回的最后一个元素

    public static void main(String[] args) {
       ArrayList<String> list = new ArrayList<>();
        list.add("林黛玉");
        list.add("贾宝玉");
        list.add("贾宝玉");
        list.add("薛宝钗");
        //获取迭代器对象,将集合交给迭代器对象处理,此时不能手动操作集合
        Iterator<String> it = list.iterator();
        while (it.hasNext()){
            //next做了两件事1.获取当前数据交给迭代器持有 2. 迭代器指向下一个元素
            String s = it.next();
            if(s.equals("贾宝玉")){
                //删除迭代器持有数据的数据
                it.remove();
            }
        }
        System.out.println(list);//[林黛玉, 薛宝钗]
    }

3.2 增强for循环:

  • 其内部原理是一个Iterator迭代器
  • 实现Iterable接口的类才可以使用迭代器和增强for(所有单列集合Collection的实现类和数组)

示例代码:

public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("呦呦鹿鸣,食野之苹");
        list.add("关关雎鸠,在河之洲");
        list.add("求之不得,寤寐思服");
        //数据类型一定是集合或者数组中元素的类型
        //str仅仅是一个变量名而已,在循环的过程中,依次表示集合或者数组中的每一个元素
        //list就是要遍历的集合或者数组
        for (String str : list) {
            System.out.println(str);
        }
    }

4. List集合的实现类

List接口的实现类:

  • ArrayList集合:底层是数组结构实现,查询快、增删慢
  • LinkedList集合:底层是双链表结构实现,查询慢、增删快

LinkedList集合特有方法:

方法名说明
public void addFirst(E e)在该列表开头插入指定的元素
public void addLast(E e)将指定的元素追加到此列表的末尾
public E getFirst()返回此列表中的第一个元素
public E getLast()返回此列表中的最后一个元素
public E removeFirst()从此列表中删除并返回第一个元素
public E removeLast()从此列表中删除并返回最后一个元素

 

如有错误欢迎留言评论,及时更正。5月29日 羽露风

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羽露风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值