Collection单列集合概述一

Collection集合(1)

数组和集合对比

  • 相同点

都是容器,可以存储多个数据

  • 不同点
    • 数组的长度是不可变的,集合长度是可变的
    • 数组可以保存基本数据类型和引用数据类型,集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类
public class MyArrays {
    /*
        数组的长度是不可变的,集合长度是可变的
        数组可以保存基本数据类型和引用数据类型,集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类
    */
    public static void main(String[] args) {
       // 数组长度是不可变的,集合长度是可变的
        // 定义一个初始长度为10的数组
       int[] arr = new int[10];
       arr[0] = 1;

       // 数组可以存储引用数据类型,也可以存基本数据类型
       String[] arrStr = new String[10];
        arrStr[0] ="abc";

       // 集合存储引用数据类型
        ArrayList<String> arrayListStr= new ArrayList<String>();
        arrayListStr.add("ace");

        // 定义一个集合,存储的数据类型为Integer,也就是int类型的包装类,
        // 当尖括号中直接输入基本类型的时候会报错
        ArrayList<Integer> arrayList = new ArrayList<Integer>();
        arrayList.add(10);

    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BeYh3Eq8-1606381370377)(C:\Users\云酱\Desktop\图片\01_集合类体系结构图.jpg)]

Collection常用方法

1.什么是Collection集合

Collection是单列集合的顶级接口,他没有直接的具体实现类,有两个子接口,分别是Set和List

2.如何创建Collection集合对象

  • 多态的方式 Collection<String> collection = new ArrayList<String>();
  • 具体的实现类,ArrayList,LinkedList,HashSet,TreeSet

3.Collection集合常用的方法

方法名说明
boolean add(E e)添加元素
boolean remove(Object o)从集合中移除指定的元素
boolean removeIf(Object o)根据条件进行移除
void clear()清空集合中的元素
boolean contains(Object o)判断集合中是否存在指定的元素
boolean isEmpty()判断集合是否为空
int size()集合的长度,也就是集合中元素的个数
public class MyCollectionDemo1 {
    public static void main(String[] args) {
        // 创建一个集合,这里采用多态的方式进行创建
        Collection<String> collection = new ArrayList<String>();
        // 添加元素
        collection.add("aaa");
        collection.add("bbb");
        collection.add("bbb");
        collection.add("ccc");
        collection.add("ddd");
        collection.add("fffff");
        // 输出集合的长度
        System.out.println(collection.size());
        // 从集合中移除指定元素
        // 根据集合的特性,删除一个元素,它后面的元素都会往前移动一下
        // 所以删除的时候我们控制一下这种情况
        for (int i = 0; i < collection.size(); i++) {
            // 如果删除了指定元素,就后退一个索引,然后继续遍历寻找,直到删除所有指定元素
            if (collection.remove("bbb")) {
                i--;
            }
        }
        // 查看是否删除了集合中所有的指定元素
        System.out.println(collection);
        // 根据条件进行移除,括号中的正则表达式是 boolean test(T t);
        collection.removeIf((String s)->{
           return s.length()==5;
        });
        System.out.println(collection);
        // 判断集合中是否存在指定的元素,存在返回true,不存在返回false
        System.out.println(collection.contains("aaa"));
        // 清空集合中的元素
        collection.clear();
        System.out.println(collection);

        // 判断集合是否为空,空返回true,非空返回false
        System.out.println(collection.isEmpty());
    }
}

Collection-迭代器的基本使用

1.什么是迭代器

迭代器是集合专用的遍历方式(迭代器就是一个对象)

2.如何创建迭代器

Iterator<String> iterator = collection.iterator();

返回此集合中元素的迭代器,该迭代器对象默认指向当前集合0索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rxr126bg-1606381370382)(C:\Users\云酱\Desktop\图片\迭代器.png)]

3.Iterator中的常用方法

boolean hasNext():判断迭代器指向有没有超过集合的大小

E next();将迭代器指向移向下一个索引位置,同时获取当前位置的元素.

4.Collection集合的遍历

public class MyCollectionDemo5 {
    public static void main(String[] args) {
        // 创建一个集合,这里采用多态的方式进行创建
        Collection<String> arrayList = new ArrayList<String>();
        // 添加元素
        arrayList.add("aaa");
        arrayList.add("bbb");
        arrayList.add("bbb");
        arrayList.add("ccc");
        arrayList.add("ddd");
        arrayList.add("fffff");
        // 使用迭代器进行遍历
        Iterator<String> iterator1 = arrayList.iterator();
        while (iterator1.hasNext()){
           String str =  iterator1.next();
            System.out.println(str);
        }
    }
}

迭代器的原理分析

迭代器原理(三个方法)

1.Iterator 对象名 = 集合名.iterator():获取迭代器对象,默认指向0索引

2.boolean hasNext():判断迭代器指向有没有超过集合的大小

3.E next():将迭代器指向移向下一个索引位置,同时获取当前位置的元素

// iterator
Iterator<String> iterator1 = arrayList.iterator();
        while (iterator1.hasNext()){
           String str =  iterator1.next();
            System.out.println(str);
        }

迭代器中删除的方法

void remove:删除迭代器对象当前指向的元素

public class MyCollectionDemo6 {
    public static void main(String[] args) {
        // 创建一个集合,这里采用多态的方式进行创建
        Collection<String> arrayList = new ArrayList<String>();
        // 添加元素
        arrayList.add("aaa");
        arrayList.add("bbb");
        arrayList.add("bbb");
        arrayList.add("ccc");
        arrayList.add("ddd");
        arrayList.add("fffff");
        // 使用迭代器进行遍历
        Iterator<String> iterator1 = arrayList.iterator();
        while (iterator1.hasNext()){
           String str =  iterator1.next();
           // 使用String类中的equals的方法,对比获取到的元素,然后删除
           if(str.equals("aaa")){
        
               iterator1.remove();
           }
        }
        System.out.println(arrayList);
    }
}

注意:迭代器不能修改和添加元素

增强for循环-基本应用

1.什么是增强for

简化数组和Collection集合的遍历,比迭代器简单,也比for循环简单

2.如何使用?

for(集合/数组元的数据类型 变量名:集合/数组名){
    System.out.println(变量名);
}

3.增强for的原理

他是JDK5之后出现的,内部原理也是一个Iterator迭代器(数组是for,集合为Iterator)

4.增强for的应用场景

实现Iterable接口的类,才可以使用迭代器和增强for(数组)

  • 示例代码
public class MyCollectionDemo4 {
    public static void main(String[] args) {
        // 创建一个集合,这里采用多态的方式进行创建
        Collection<String> arrayList = new ArrayList<String>();
        // 添加元素
        arrayList.add("aaa");
        arrayList.add("bbb");
        arrayList.add("bbb");
        arrayList.add("ccc");
        arrayList.add("ddd");
        arrayList.add("fffff");
        // 使用增强for遍历数组
        // 使用增强for遍历数组
        // 数据类型是集合中元素的类型
        // String 是传入集合中所存元素的类型
        // s仅仅是一个变量名而已,在循环的过程中表示集合中的每一个元素
        // arrayList就是要遍历的集合或者数组
        for (String s : arrayList) {
            System.out.println(s);
        }
    }
}

增强for的注意事项和三种遍历应用的场景

1.注意事项

在增强for循环中无法改变数组或集合中的元素(Iterator)

2.三种遍历应用的场景

增强for:

对集合进行遍历时候进行使用,遍历过程中如果要增删元素,就不能使用

迭代器(Iterator):

遍历过程中,需要取出元素,再删除元素时候使用,否则报错

普通for:

普通遍历在需要增删元素,或其他操作时候使用

注意!!!注意!!!注意!!! 增强for可以操作数组和集合,而迭代器只能操作集合

List集合

1.什么是List集合

  • 有序集合,这里有序说的是存储有序
  • 用户可以精确控制列表中每个元素的插入位置,用户可以通过索引访问元素
  • 与set集合不同,列表一般允许存储重复的元素

2.List集合特点

  • 存取有序
  • 元素可以重复
  • 有索引

List集合的特有的方法

方法名说明
void add(int index,E element)在此集合中的指定位置插入指定的元素
E remove(int index)删除指定索引处的元素,返回被删除的元素
E set(int index,E element)修改指定索引处的元素,返回被修改的元素
E get(int index)返回指定索引处的元素
public class MyCollectionDemo7 {
    public static void main(String[] args) {
        // 创建一个集合,这里采用多态的方式进行创建
        List<String> arrayList = new ArrayList<String>();
        // 添加元素
        arrayList.add("aaa");
        arrayList.add("bbb");
        arrayList.add("ccc");
        arrayList.add("ddd");
        arrayList.add("fffff");
        // 在此集合中的指定位置插入指定的元素
        // 在1索引位置插入元素nnn
        // 在使用方法的时候注意,你创建的对象的时候,用的是否是List集合
        // =.=!!! 我就用错用了Collection
        arrayList.add(1,"nnn");
        System.out.println(arrayList);
        // 删除指定索引的元素,返回值是被删除的元素
        // 我们把索引2处bbb删除,并打印输出一下
        System.out.println(arrayList.remove(2));
        System.out.println(arrayList);
        // 修改指定索引出的元素,返回被修改的元素
        // 我们把4索引处的五个f修改为三个,然后返回一下被修改的元素
        System.out.println(arrayList.set(4, "fff"));
        System.out.println(arrayList);
        // 返回指定索引处的元素
        // 我们看下0索引下的元素是什么
        System.out.println(arrayList.get(0));
        System.out.println(arrayList);
    }
}

数据结构,栈,队列,链表

数据结构之栈和队列

  1. 栈结构

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T9OpcHK4-1606381370384)(C:\Users\云酱\Desktop\图片\栈结构图.png)]

    栈结构遵循先进后出的原则

  2. 队列结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lAmZFCRy-1606381370386)(C:\Users\云酱\Desktop\图片\队列结构图.jpg)]

队列遵循先进先出的原则,从队尾进队伍,然后从队头出队

数组和链表的特点

这里不详细说数组和链表,只简单说一下他们的特点

数组的特点: 查询快,增删慢

链表的特点:增删快,查询慢

数组用的比较多,比较广泛

ArrayList源码解析

1.ArrayList的底层是一个数组

2.当初始化ArrayList时候,数组长度为0

3.当第一次添加元素的时候,数组的长度为10

(特别注意的是,你使用length方法或者size方法,获取的是当前集合或数组中所存元素的个数,不要搞混了)

4.以后添加时,如果数组的长度不满足时,进行扩容,按照1.5倍来进行扩容

5.扩容之后,将原数组的元素拷贝到新的数组中

List集合的实现类

LinkedList的基本应用

LinkedList与ArrayList的区别

1.ArrayList集合的特点

底层是数组结构实现的,查询快增删慢

2.LinkedList集合特点

底层是链表结构实现的,查询慢,增删块

LinkedList集合的特有功能

  • 特有方法
方法名说明
public void addFirst(E e)在该列表的开头插入一个元素
public void addLast(E e)在该列表的末尾插入一个元素
public E getFirst()返回此列表的第一个元素
public E getLast()返回此列表的最后一个元素
public E removeFirst()从此列表中删除并返回第一个元素
public E removeLast()从此列表中删除并返回最后一个元素
  • 示例代码
public class MyCollectionLinkedList {
    public static void main(String[] args) {
        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.add("默默");
        linkedList.add("主宰");
        linkedList.add("三千");
        // 在该列表的开头插入一个元素
        linkedList.addFirst("时光不老,我们不散");
        for (String s : linkedList) {
            System.out.println(s);
        }
        System.out.println("------我是一条华丽的分割线------");
        // 在该列表的末尾插入一个元素
        linkedList.addLast("在黑马学习的日子,我过的很充实,也很开心,希望接下来的日子,我能学到更多的知识");
        linkedList.addFirst("时光不老,我们不散");
        for (String s : linkedList) {
            System.out.println(s);
        }
        System.out.println("------我是一条华丽的分割线------");
        // 返回此列表的第一个元素
        System.out.println(linkedList.getFirst());
        System.out.println("------我是一条华丽的分割线------");
        // 返回此列表的最后一个元素
        System.out.println(linkedList.getLast());
        System.out.println("------我是一条华丽的分割线------");
        // 删除方法就不再演示了,因为这就是我现在想说的话,我不想删了它
    }
}

LinkedList需要注意的事项的补充

get(Index)首先判断索引离头近,还是离尾近,如果离头近从开头查,离尾近,就从末尾查

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值