Java基础知识学习 之 集合

集合

本部分为日常学习笔记,因整理方法尚不完善,部分内容或有待补充。
之后会逐一编辑完善,用作日常知识点记录与参考。

  • collection接口
    • List接口
      • ArrayList
      • Vector
        • Stack
    • Queue接口
      • Deque
        • LinkedList

集合特点

集合类解决什么问题?

在不知道集合中到底有多少个对象的情况下,对于一组对象进行操作,而不是某一个对象。

集合类的特点
  • 只能存储引用数据类型
  • 当存储空间不足时,能够进行自动扩容
数组和集合都是容器,它们之间有什么不同?

主要的区别存在于数据类型、长度、效率、API四个方面;

数组 集合类
数据类型 可以存储多种数据类型 仅仅能够存储引用类型
长度 一旦创建,长度不变 空间不够能够自动扩容
效率 较高,偏底层 较低
API 没什么API 有丰富的API

Collection接口概述

Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。JDK不提供此接口的任何直接实现:它提供更具体的子接口(如 Set 和 List)实现。

  • Collection的子类接口为set、List
  • 有些子类集合允许重复有些不允许,有些子类集合是有序的有些是无序的
Collection API
  • 单个集合上进行操作
    • boolean add(E e)–添加元素e,确保集合中存在元素
    • boolean remove(Object o)–移除集合中指定元素,如果有重复的只会删除一个
    • void clear()–将集合中的内容置为空,但该集合对象依然存在
    • boolean contains(Object o)–查找集合中是否存在该元素,如果存在则返回true
    • boolean isEmpty()–判断该集合是否为空,如果是空则返回true
    • int size()–返回集合中元素的个数
  • 多个集合上进行操作
    • boolean addAll(Collection c)–将指定集合c中的所有元素都添加到集合当中,相当于两集合求并集
    • boolean removeAll(Collection c)
    • boolean containsAll(Collection c)
    • boolean retainAll(Collection c)
迭代器Iterator接口
迭代器的模型
迭代器的实现语法
迭代器的设计原理
  • 为什么Iterator定义成一个接口而不是一个类?
    1. 不同的集合数据接口可能不同,遍历方式也不一样,所以不能够再一个类当中实现对所有集合的遍历。
    2. 遍历是集合的基本操作,应该有一个统一的方法作为遍历的标准,因此需要一个抽象方法表示遍历。
    3. 因为迭代器与集合之间没有从属关系,所以将迭代器设置为接口而非抽象类。
  • 通过Iterator it=c.iterator();方式获取迭代器,其中it肯定是Iterator的实现子类对象,那么此迭代器是什么类型的?为什么要这样设计迭代器?
    1. 迭代器用来遍历集合,所以迭代器必须知道集合的数据结构,但集合的数据结构都是私有的;
    2. 一个类如何访问另一个类的私有成员?此处通过内部类来实现迭代器;
      • 局部内部类的对象属于该方法所有,遍历集合在多种方法中都可能用到,所以不能以局部内部类实现迭代器;
      • 静态内部类对象属于外部类而非外部类对象,也就是不依赖于集合对象,也不适合实现迭代器;
      • 成员内部类对象依赖于外部类对象存在,所以创建方式也是通过外部类对象进行创建。
      • 这属于设计模式中的【迭代器模式】;
使用迭代器的注意事项
  • 警惕ConcurrentModificationException异常
  • 不要使用while循环遍历集合,推荐使用for循环,最好使用foreach循环;

List接口

有序的collection,此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

List子类
ArrayList
  • 特点
    • 底层数据结构是数组,查询快,增删慢
    • 不是同步的,所以线程不安全,但是没有锁效率高
  • 常用API:
    • 11
Vector 向量
  • 特点
    • 底层数据结构是数组,查询快,增删慢
    • 是同步的,线程安全
  • 常见API
    • 11
LinkeList

List 接口的链接列表实现。

  • 实现所有可选的列表操作,并且允许所有元素(包括 null)。
  • 这些操作允许将链接列表用作堆栈、队列或双端队列。
  • 不仅实现了List接口,而且实现了Deque接口
  • 特点
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值