JAVA集合和数组

本文详细介绍了数组和集合的区别,包括数组的固定长度、索引查询快速但增删慢,以及集合的长度可变、支持引用数据类型。深入探讨了集合框架,如List接口的ArrayList和LinkedList,它们的增删改查操作,以及遍历方法。还提到了数据结构中的栈、队列、数组和链表的特点,并分析了ArrayList的扩容机制和LinkedList的双向链表实现。
摘要由CSDN通过智能技术生成

在这里插入图片描述集合和数组的区别

数组的特点:
  1、长度不能变 ---> 数组被淘汰的原因
  2、元素有索引 ---> 查找某个元素很快,增删某个元素很慢
  3、元素可以重复
  4、元素存取有序
  5、数组中的元素可以存储基本数据类型也可以存储引用数据类型 -> 多个数组
  6、数组中的元素数据类型一致 -> 单个数组
  
集合的特点:
  1、长度可变 
  2、元素只能是引用数据类型 -> 弊端,但是被解决。 --> 包装类
单列集合:  
  Collection
  List
  ArrayList 
  LinkedList
  Vocter
  Set
  TreeSet
  HashSet 
双列集合: 
  Map
  HashMap 
  TreeMap
  Hashtable
  Properties 

单列集合的体系结构
在这里插入图片描述Collection接口

单列集合的根节点:Collection<E>接口
  	1、创建容器、链接容器
  	    多态的形式创建对象:
  	        Collection<E> 集合名 = new 子类集合<E>();
  	2、增删改查四类功能 CRUD
  	    增: boolean add(E e) : 依次添加元素
  	    删:
  	        boolean	remove(Object o):按照元素值删除元素,返回删除是否成功
            void clear(): 把集合中的所有元素清空
        改: 因为没有索引所以没有修改的方法
        查: 因为没有所以所以没办法根据索引找值
            int	size():获取集合的元素个数、长度
            boolean	isEmpty():判断集合是否为空
            boolean	contains(Object o):判断传入的元素是否存在于集合中
  	3、遍历
  	    1、转数组 -> 面向过程
  	        Object[] toArray()
  	    2、迭代器 -> 面向对象
  	        Iterator<E>	iterator()
  	        Iterator:迭代器的类
  	            boolean hasNext(): 判断是否有下一个元素
  	            E next():获取下一个元素
  	    3、超级for、增强for、foreach
  	        作用: 用于遍历集合和数组的
  	        格式:
  	            for(泛型 变量名 : 集合名/数组名){
                    //变量就是接收集合中元素的
  	            }
  	        快捷键: 集合名.for
  	        底层: 超级for的底层是一个迭代器对象
  	        注意:超级for只是用来遍历集合的,不要在超级for中编写对集合内容进行修改的代码

  	 注意:
  	 1、当你使用集合对象创建迭代器对象之后,迭代器对象会生成一个集合的镜像,其实迭代器遍历的是这个镜像
  	 2、每次遍历集合元素的时候,都会查看镜像的内容和集合中的内容是否一致,若不一致就立马报错
  	        ConcurrentModificationException:并发修改异常
  	      请你使用迭代器对象遍历集合的时候不要使用集合对象对原集合进行修改     

List接口

元素有索引、元素可重复、元素存取有序的单列集合根节点
1、创建对象
  	List<E> 集合名 = new 子类集合<E>();
2、增删改查四类功能
  	增:
			boolean	add(E e):依次添加元素,并返回true
      void	add(int index, E element):在指定索引位置插入元素
    删:	
			E	remove(int index):按索引删除,返回被删除的元素
      boolean	remove(Object o):按元素值删除,返回删除是否成功
      void clear(): 把集合中的所有元素清空  
    改:
			E	set(int index, E element):根据索引修改指定索引位置的元素,返回被修改的元素
    查:	
			E	get(int index):获取指定索引位置的元素
      int	size():获取集合的元素个数、长度
      boolean	isEmpty():判断集合是否为空
      boolean	contains(Object o):判断传入的元素是否存在于集合中  
      int	indexOf(Object o):获取传入的元素第一次出现在集合的索引位置
      int	lastIndexOf(Object o):获取传入的元素最后一次出现在集合的索引位置
        
      JDK8后特有的静态方法: 不推荐使用
            static List<E> of(E... elements)
          注意:你一旦用of方法创建的集合对象,就不可以再对集合内容进行修改  
3、遍历
  	    1、转数组 -> 面向过程
  	        Object[] toArray()
  	    2、迭代器 -> 面向对象
  	        Iterator<E>	iterator()
  	        Iterator:迭代器的类
  	            boolean hasNext(): 判断是否有下一个元素
  	            E next():获取下一个元素
  	   3、超级for、增强for、foreach
  	        作用: 用于遍历集合和数组的
  	        格式:
  	            for(泛型 变量名 : 集合名/数组名){
                    //变量就是接收集合中元素的
  	            }
  	        快捷键: 集合名.for
  	        底层: 超级for的底层是一个迭代器对象
  	        注意:超级for只是用来遍历集合的,不要在超级for中编写对集合内容进行修改的代码 
        4、get和size遍历
        5、列表迭代器 ListIterator
              ListIterator<E>	listIterator()
              使用步骤和迭代器一模一样。
              void	add(E e):往迭代器镜像中添加元素并立刻同步到原集合
              	注意:往迭代器指针的左边加元素。

数据结构

栈:stack 先进后出
队列:queue 先进先出
数组:array 查询快、增删慢
链表:linked 查询慢、增删快  

ArrayList底层原理

1、ArrayList底层是数组结构
  
2、ArrayList添加元素的步骤:
  	a、计算机会在内存中创建一个长度为0的数组
  	b、若添加一个元素,会创建一个长度为10的数组
  	c、依次添加元素
  	d、当添加的元素到第11个的时候,底层会再创建一个长度是原来1.5倍的新数组,再把原来数组中的元素复制到新数组
  	e、每当数组的容量满了,底层创建的新数组都是原来数组的1.5倍长度

LinkedList集合

底层数据结构是双向链表的List集合实现
1、创建对象
  	LinkedList<E> 集合名 = new LinkedList<E>();
2、增删改查四类功能
  	增:
			boolean	add(E e):依次添加元素,并返回true
      void	add(int index, E element):在指定索引位置插入元素
    删:	
			E	remove(int index):按索引删除,返回被删除的元素
      boolean	remove(Object o):按元素值删除,返回删除是否成功
      void clear(): 把集合中的所有元素清空  
    改:
			E	set(int index, E element):根据索引修改指定索引位置的元素,返回被修改的元素
    查:	
			E	get(int index):获取指定索引位置的元素
      int	size():获取集合的元素个数、长度
      boolean	isEmpty():判断集合是否为空
      boolean	contains(Object o):判断传入的元素是否存在于集合中  
      int	indexOf(Object o):获取传入的元素第一次出现在集合的索引位置
      int	lastIndexOf(Object o):获取传入的元素最后一次出现在集合的索引位置
        
      JDK8后特有的静态方法: 不推荐使用
            static List<E> of(E... elements)
          注意:你一旦用of方法创建的集合对象,就不可以再对集合内容进行修改  
3、遍历
  	    1、转数组 -> 面向过程
  	        Object[] toArray()
  	    2、迭代器 -> 面向对象
  	        Iterator<E>	iterator()
  	        Iterator:迭代器的类
  	            boolean hasNext(): 判断是否有下一个元素
  	            E next():获取下一个元素
  	   3、超级for、增强for、foreach
  	        作用: 用于遍历集合和数组的
  	        格式:
  	            for(泛型 变量名 : 集合名/数组名){
                    //变量就是接收集合中元素的
  	            }
  	        快捷键: 集合名.for
  	        底层: 超级for的底层是一个迭代器对象
  	        注意:超级for只是用来遍历集合的,不要在超级for中编写对集合内容进行修改的代码 
       4、get和size遍历
        5、列表迭代器 ListIterator
              ListIterator<E>	listIterator()
              使用步骤和迭代器一模一样。
              void	add(E e):往迭代器镜像中添加元素并立刻同步到原集合
              	注意:往迭代器指针的左边加元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值