栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java12

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java12

集合容器

数组(Array)有什么缺点

  1. 在创建数组的时候,就需要定死长度,在运行过程中需要判断剩余长度,并动态扩容
  2. 在中间插入的时候,需要将后面的元素进行后移
  3. 在中间删除的时候,需要将后面的元素进行前移
  4. 数组中所有的元素但是同一种类型

数组的封装类 - 列表(ArrayList)

数组的特点:有序的,不唯一的(不会自动去重)

-构造方法  先研究如何构造对象

ArrayList()

ArrayList(int)

-成员变量  研究构造出来的对象中有什么

elementDate--object[]类型

size--int类型

-成员方法  研究如何操作对象中的成员

add(int)--在数组尾部的第一个不为空的位置添加

add(int,E)--在数组的指定位置插入

size(int,E)--修改数组指定位置

remove(int)--根据索引号移除

remove(object)--根据指针移除,如果存在多个只会移除第一个

get(int)--根据指定的索引号找到某个元素并返回

不需要担心扩容问题

ArrayList类中的那个“E”到底是啥?

E出现的位置:

  1. 类的签名上面有一个
  2. Add方法参数类型是E
  3. Get方法的返回值类型是一个E
  4. 取出元素后的向下转型为E类型

E是一个未知的数据类型:泛型  --作者在编写的时候用E来表达数据类型的未知

泛型                      --调用者在时候的时候,可以给出E的具体类型,也可以不给(给的话例如:E=String  E=Car...不给的话E=Object)  

用泛型来实现类中用到的数据类型(可以是参数,可以是任意变量的类型,可以是向下转型时的类型)

给出E的具体数据类型的语法:(如果给出E具体数据类型,是在声明指针的时候给出)

ArrayListal1=new ArrayList();

ArrayListal2=new ArrayList();

泛型的好处:被调用方可以帮调用方写向下转型的代码

 

双向链表封装类-LinkeList

底层:Node对象

构造方法

成员变量

成员方法

-增

  1. addFirst(E)--在头部添加

2.addLast(E)--在尾部添加

3.add(E)   --在尾部追加

4.add(int,E)--在指定位置插入

链表在中间插入的速度要优于数组,只需要找到要插入位置的节点,创新节点,然后修  改指针即可

 数组在尾部插入较快,但是在首部或者中间插入,比较慢,因为需要数据后移

数组:遍历数组,指定位置后面的元素要后移

链接:遍历数组,指定位置的节点修改指针

  -删

  1. removeFisrt() - 删除头部
  2. removeLast() - 删除尾部
  3. remove(int) - 根据指定位置删除
  4. remove(object ) - 根据指元素删除

-改

set(int,E)

  1. 检查下标是否越界
  2. 调用node方法找到需要修改的节点

-查

get(int,E)

数组有索引 - 不需要遍历

链表没有索引的 - 底层通过遍历链表然后通过二分查找,找到指定位置的节点,并返回节点的item

从查询的角度来看,数组的性能远远优于链表

增删链表快,改和查数组快

(中间插入和删除,链表优于数组;查询和修改,数组优于链表)

链表不存在扩容和转移,数组存在

LinkeList类中的一个静态内部   Node - 节点

next:下一个  prev:上一个

LinkeList内部类 - Node类(用于创建双向链表中的节点对象)

 

 Array和ArrayList的区别是什么?

Array是数组,ArrayList是类

Array是定长的( 需要手动扩容),ArrayList长度可变(使用过程中自动扩容)ArrayList的底层是Array

ArrayList和LinkedList的区别是什么?

1.底层数据结构实现: ArrayList底层数据结构是动态数组,而LinkedList的底 层数据结构是双向链表

2.随机访问(即读)效率: ArrayList比LinkedList在随机访问的时候效率要高,因为ArrayList底层 是数组,

可以通过索引号快速访问,LinkedList是通过二 分查找法遍历链表节点进行查找的

3.增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比ArrayList 效率要高,因为ArrayList

增删操作需要大量的前移或后移,这个过程中涉及到大量的赋值操作比较耗时间,LinkedList只需要修改节点对象的左右指针即可。4.内存空间占用: LinkedList比ArrayList 更占内存,因为LinkedList

的节点除了存储数据,还存储了两个引用,一个指向前一-个元素,一个指向后一个元素。

5.综合来说,在需要频繁读取集合中的元素时,更推荐使用ArrayList, 而在插入和删除操作较多时,更推荐使用LinkedList。

你知道几种遍历ArrayList的方式
1.for循环

2.增强for循环

3.forEach循环

4.迭代器

整理
整理ArrayList和LinkedList的常用方法

 ArrayList常用方法:

add(int)--在数组尾部的第一个不为空的位置添加

add(int,E)--在数组的指定位置插入

size(int,E)--修改数组指定位置

remove(int)--根据索引号移除

remove(object)--根据指针移除,如果存在多个只会移除第一个

get(int)--根据指定的索引号找到某个元素并返回

LinkedList的常用方法:

 -增

 1.addFirst(E)--在头部添加

 2.addLast(E)--在尾部添加

 3.add(E)   --在尾部追加

 4.add(int,E)--在指定位置插入

  -删

  1. removeFisrt() - 删除头部
  2. removeLast() - 删除尾部
  3. remove(int) - 根据指定位置删除
  4. remove(object ) - 根据指元素删除

-改

set(int,E)

  1. 检查下标是否越界
  2. 调用node方法找到需要修改的节点

-查

get(int,E)

数组有索引 - 不需要遍历

链表没有索引的 - 底层通过遍历链表然后通过二分查找,找到指定位置的节点,并返回节点的item

从查询的角度来看,数组的性能远远优于链表

链表在中间插入的速度要优于数组,只需要找到要插入位置的节点,创新节点,然后修  改指针即可

 数组在尾部插入较快,但是在首部或者中间插入,比较慢,因为需要数据后移

数组:遍历数组,指定位置后面的元素要后移

链接:遍历数组,指定位置的节点修改指针

增删链表快,改和查数组快

(中间插入和删除,链表优于数组;查询和修改,数组优于链表)

链表不存在扩容和转移,数组存在

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1006675.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号