Java学习 ---- Collection集合

Day15.01_____数组的特点

  • 数组(数组是容器的一种)
    • 既可以存储基本数据类型,又可以存储引用数据类型(对象)
    • 长度是固定的,不能自动增长
    • 存储引用数据类型时,存储的是数据的地址值,未赋值时,默认值为null;存储基本数据类型时,存储的是基本数据类型所对应的值,未赋值时,默认值为对应基本数据类型的默认值


Day15.02_____集合的特点

  • 集合(集合是容器的一种)
    • 只能存储引用数据类型(对象),当我们存储基本数据类型时,底层会帮我们自动将基本数据类型进行拆箱,转换成对象后再放入集合中
    • 长度可以改变
    • 有些集合底层其实也是用数组实现的。每次集合中的数据存储满了以后,底层就会增加1.5倍数组的长度。
      • 为什么是1.5倍的数组呢?
        解释: 如果是2倍的长度,当我们把长度为10的数组增加到长度为11时,会浪费9个空间,而1.5倍只浪费4个空间,相对来说节省了空间;如果是1倍的长度,当我们把长度为10的数组增加到长度为11时,就会把原来的抛弃,当成垃圾,当我们又想把长度为11的变成长度为12的时候,又会把11的抛弃,当成垃圾。也特别的浪费空间,因此选择1.5倍的增长是最合适的


Day15.03_____Collection接口

  • Collection是所有接口的根接口
  • Colleciton集合的分类
    • List(底层由数组实现):
      • List子类
        • ArrayList
        • Vector
        • LinkedList
      • List类型的集合特点:和数组类似
        • 有序,即存和取的顺序一样,有索引
        • 元素可以重复,因为有索引
    • Set:
      • Set子类
        • HashSet
        • TreeSet
      • Set类型的集合特点:
        • 无序, 即存和取的顺序不一样, 无索引
        • 元素不可以重复,因为没有索引
  • Collection集合的抽象方法
    • 1、基本功能:
      • clear()
        返回值类型Boolean,用于清空地址引用
      • contains(Object o)
        返回值类型Boolean,用于判断集合对象中是否包含对象o
      • equals(Object o)
        返回值类型Boolean,用于集合和集合之间的比较。使用List类的子类创建Collection接口的子类对象时,里面的元素只有当个数一样且顺序相同时才会返回true
      • isEmpty()
        返回值类型Boolean,用于判断集合中是否为空
      • remove(Object o)
        返回值类型Boolean,用于移除集合中的某个对象
      • size()
        返回值类型int,用于获取集合的长度
      • toArray()
        返回值类型Object[] ,用于将集合转换成数组
      • iterator()
        返回值类型Iterator,用于将集合对象转换成一个Iterator对象
    • 2、add()方法和toString()方法
      • add(Object o)
        返回值类型Boolean,用于向集合中添加数据,当我们用List类的子类创建Collection引用时,使用add方法无论添加什么都会返回true;那什么时候返回false呢?当我们用Set类的子类创建Collection引用时,如果集合中添加了相同的元素,就会报错,因为Set类是无序的,里面的元素是不可以重复的
      • toString()
        返回值类型String,用于返回集合中存储对象的属性值,这个方法不是在ArrayList类中重写的,是在它的爷爷类中重写的
    • 3、高级功能(所有带All的方法):
      • addAll(Collection c)
        返回值类型Boolean,遍历o中的所有元素,并将元素加入调用addAll方法的接 口对象中。
        • addAll()与add()方法的区别:
          • addAll()方法会将o对象先进行一个遍历,然后将遍历得到的每一个数据加入到调用addAll()方法中,此时集合的长度为调用集合长度+参数集合长度;add()方法不会遍历参数集合,而是直接将参数集合整体作为一个数据放入到调用集合中,此时集合的长度为: 调用集合长度+1
      • containsAll(Collection c)
        返回值类型Boolean,用于判断调用集合是否包含参数集合,只要包含一个就返回true
      • removeAll(Collection c)
        返回值类型Boolean,删除的是交集。如果两个集合没有交集,就返回调用集 合中的元素
      • retainAll(Collection c)
        返回值类型Boolean,取交集。需要注意的是取了交集后,如果调用集合里面的元素发生了改变就返回true;如果调用集合里面的元素没有发生改变就返回false。如果两个集合没有交集,就返回"[]"


Day15.04_____Iterator接口

  • Iterator是什么?
    用于遍历集合东西,和for循环遍历数组是一个意思
  • 为什么要用Iterator?
    在没有学迭代器之前,我们每次遍历集合中的元素都需要先将集合转换成数组,然后再对数组进行操作。我们都知道数组的长度是不可变的,当我们想要再一次添加或者减少数据时,又必须重新创建一个集合,特别的浪费空间,操作也特别麻烦,因此提出了新的概念,迭代器。它是专门用于遍历集合的
  • Iterator中的方法
    • hasNext()
      返回值类型Boolean,用于判断集合中是否还有元素。如果有就返回true,没有就返回false
    • next()
      返回值类型Object,用于取出集合中的元素。next()方法相当于一个指针,第一次指向集合中的第一个元素,当我们调用next()方法的时候,首先取出这个元素,然后将指针指向第二个元素。需要注意的是在迭代器中next()方法只能用一次


Day15.05_____List接口

  • 因为List是一个接口,不能直接创建对象,因此只能采用父类引用指向子类对象的方式进行创建
  • 成员方法:除了拥有Collection接口中的所有方法,还有一些自身的特定方法
    • add(int index, Object o)
      返回值类型void,用于在集合中的指定位置添加对象,例如在集合中1的位置添加对 象,那么在原集合中从索引1到最后会向后延,同时里面的index最大只能为集合的长度
    • addAll(int index, Collection c)
      返回值类型Boolean,用于在集合的指定位置添加集合,数据底层解析的原理和addAll(Collection c)一样,添加数据的原理和(1)的一样,其中index最大只能为集合的 长度
    • get(int index)
      返回值类型Object,返回集合中对应索引的对象,其中index最大只能为集合长度-1
    • indexOf(int index)
      返回值类型Object,用于获取某一对象在集合中第一次出现的位置
    • lastIndexOf(int index)
      返回值类型Object,用于获取某一对象在集合中最后一次出现的位置
    • remove(int index)
      返回值类型Object,移除指定位置的对象,并将这个移除的对象返回。其中index最大只能取集合的长度-1
    • set(int index, Object o)
      返回值类型Object,修改原集合中指定位置的元素
    • subList(int fromIndex, int endIndex)
      返回值类型List,截取原集合中的子集合,包含fromIndex,不包含endIndex
    • listIterator()
      返回值类型ListIterator,用于将集合对象转换成ListIterator对象
  • 遍历List接口类型集合的方法
    • 通过size()和get()方法去遍历并且获取集合中的每一个对象
      * 注意:这种方法只适合List集合,不适合Set集合,因为Set集合没有索引
    • 通过迭代器Iterator接口中的hasNext()和next()方法遍历并获取集合中的每一个对象
      * 注意:这种方法对List和Set集合都适用
    • 通过迭代器ListIterator接口中的hasNext()和next()方法遍历并获取集合中的每一个对象


Day15.06_____ListIterator接口

  • ListIterator是Iterator的子接口,专门给List集合用
  • 成员方法:
    • hasNext()
      返回值类型Boolean,用于判断集合中是否还存在元素,与Iterator接口中的概念一样
    • next()
      返回值类型Object,用于返回集合中的某一个元素
  • 异常 ----> java.util.ConcurrentModificationException(并发修改异常)
    class Demo{
    		List list = new ArrayList();
    		list.add(new Student("张三",23));
    		list.add(new Student("李四",24));
    		list.add(new Student("王五",25));
    		list.add(new Student("张麻子",26));
    		list.add(new Student("二哈",19));
    		Iterator it = list.iterator();
    		while(it.hasNext()) {
    			Student stu = (Student)it.next();
    			if(stu.getName() == "李四") {
    				list.add(new Student("二傻",29));
    			}
    		}
    		System.out.println(list);
    	}
    
    此时这段代码会报异常,因为迭代器在迭代的过程中,集合又同时在往里 面加对象,两样东西同时在对同一样东西操作,因此报了一个同时并发异常,如果想不报错,我们可以使用List集合特有的ListIterator迭代器,这个迭代器中存在一个add()方法,以上可以修改成:
    class Demo{
    		List list = new ArrayList();
    		list.add(new Student("张三",23));
    		list.add(new Student("李四",24));
    		list.add(new Student("王五",25));
    		list.add(new Student("张麻子",26));
    		list.add(new Student("二哈",19));
    		ListIterator it = list.listIterator();
    		while(it.hasNext()) {
    			Student stu = (Student)it.next();
    			if(stu.getName() == "李四") {
    				it.add(new Student("二傻",29));
    			}
    		}
    		System.out.println(list);
    	}
    



Day15.07_____数据结构

  • 栈结构特点 先进后出
  • 队列特点 先进先出
  • 数组构成特点 增删速度慢,查速度(通过索引查询)快,修改快
  • 链表构成特点 增删速度快,查速度(通过记录的前后地址值查询)慢,修改慢


Day15.09_____List的三个子类特点

  • ArrayList 底层由数组实现,查询快,增删慢,线程不安全,效率高
  • Vector(淘汰) 底层由数组实现,查询快,增删慢,线程安全,效率低
  • LinkedList 底层由链表实现,查询慢,增删快,线程不安全,效率高
  • 面试题
    • Vector和ArrayList区别?
    • ArrayList和LinkedList区别?
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值