线性表
时间:2019-09-12
本文章向大家介绍线性表,主要包括线性表使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 线性表
1.1 java.util 接口 List
- 所有已知实现类:
ArrayList
,LinkedList
,Vector
,Stack
- 有序的 collection(也称为序列),与 set 不同,列表通常允许重复的元素
抽象方法
添加功能 add
- boolean add(E e): 将指定的元素追加到此列表的末尾。
- void add(int index, E element): 在列表的指定位置插入指定元素。
- boolean addAll(Collection<? extends E> c):添加指定 collection 中的所有元素到此列表的结尾
- boolean addAll(int index, Collection<? extends E> c):将指定 collection 中的所有元素都插入到列表中的指定位置
删除功能 remove
- void clear(): 从列表中移除所有元素。
- E remove(int index): 移除列表中指定位置的元素。
- boolean remove(Object o): 从此列表中移除第一次出现的指定元素。
- boolean removeAll(Collection<?> c): 从列表中移除指定 collection 中包含的其所有元素。
判断功能 contains
, equals
, isEmpty
- boolean contains(Object o): 如果列表包含指定的元素,则返回 true。
- boolean containsAll(Collection<?> c): 如果列表包含指定 collection 的所有元素,则返回 true。
- boolean equals(Object o): 比较指定的对象与列表是否相等。
- boolean isEmpty(): 如果列表不包含元素,则返回 true。
获取功能 get
, indexOf
, size
, hashCode
- E get(int index): 返回列表中指定位置的元素。
- int hashCode(): 返回列表的哈希码值。
- int indexOf(Object o): 返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。
- lastIndexOf(Object o): 返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。
- int size(): 返回列表中的元素数。
- List subList(int fromIndex, int toIndex): 返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。
修改功能 set
- E set(int index, E element): 用指定元素替换列表中指定位置的元素。
迭代器功能 iterator
- Iterator iterator(): 返回按适当顺序在列表的元素上进行迭代的迭代器。
- ListIterator listIterator(): 返回此列表元素的列表迭代器。
其他功能 toArray
- Object[] toArray(): 返回按适当顺序包含列表中的所有元素的数组(从第一个元素到最后一个元素)。
- boolean retainAll(Collection<?> c): 仅在列表中保留指定 collection 中所包含的元素。
注意事项
- 迭代器功能可用增强for替换: for(E e : list)
- 获取长度为:int size()不是length()
-
集合和数组的区别?
A:长度区别 数组固定 集合可变 B:内容区别 数组可以是基本类型,也可以是引用类型 集合只能是引用类型
-
并发修改异常?
A:出现的现象 迭代器遍历集合,集合修改集合元素 B:原因 迭代器是依赖于集合的,而集合的改变迭代器并不知道。 Iterator在迭代时,只能对元素进行获取next()和删除remove()的操作。 C:解决方案 a:迭代器遍历,迭代器修改(ListIterator) 元素添加在刚才迭代的位置 b:集合遍历,集合修改(size()和get()) 元素添加在集合的末尾
1.2 java.util 类 ArrayList
- List 接口的大小可变数组的实现:transient Object[] elementData。
- 是随机存取结构,查找块,增删慢
- 实现不是同步的,线程不安全
具体方法
构造方法
- public ArrayList(int initialCapacity):构造一个具有指定初始容量的空列表。
- public ArrayList():构造一个初始容量为 10 的空列表。
- public ArrayList(Collection<? extends E> c):构造一个包含指定 collection 的元素的列表。
特殊方法
- public Object clone():返回此 ArrayList 实例的浅表副本。(不复制这些元素本身。)
- public void ensureCapacity(int minCapacity):如有必要,增加此 ArrayList 实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。
- protected void removeRange(int fromIndex, int toIndex):移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之间的所有元素。
- public void trimToSize():将此 ArrayList 实例的容量调整为列表的当前大小。
1.3 java.util 类 LinkedList
- List 接口的链接列表实现,底层双向列表实现。
- 不是随机存取结构,查找慢,增删快
- 此实现不是同步的,线程不安全
具体方法
构造方法
- public LinkedList():构造一个初始容量为 10 的空列表。
- public LinkedList(Collection<? extends E> c):构造一个包含指定 collection 的元素的列表。
栈方法
- public void push(E e):将该元素插入此列表的开头, 此方法等效于 addFirst(E)。
- public E pop():移除并返回此列表的第一个元素, 此方法等效于 removeFirst()。
队列方法
- boolean add(E e): 将指定的元素追加到此列表的末尾。
- public E peek():获取但不移除此列表的头(第一个元素)。
- public E poll():获取并移除此列表的头(第一个元素)。
特有方法
- public void addFirst(E e)
- public void addLast(E e)
- public E removeFirst()
- public E removeLast()
- public E getFirst()
- public E getLast()
1.4 java.util 类 Vector
- 可以实现可增长的对象数组:protected Object[] elementData;
- 是随机存取结构,查找块,增删慢
- 实现是同步的,线程安全
特有方法
- public void addElement(E obj):add()。
- public E elementAt(int index):get()。
- public Enumeration elements():iterator()。
1.5 综合比较
ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
原文地址:https://www.cnblogs.com/Stephanie-boke/p/11515148.html
- c# IO&&线程 打造 定时打开指定程序
- 前FDIC主席:比特币政策不应打击加密货币发展
- 任何人都不应该控制区块链供应链
- c# IO操作(带进度的文件复制器,读取文本文件的指定行)
- 高科技来了!玩游戏一样开船的时代来了……
- C++库大全
- 人工智能行业前景预测 全球市场或超2700亿元
- Arxiv网络科学论文摘要14篇
- 工信部:网络强国建设2018年重点工作任务
- 刚刚!张小龙再出重磅!微信小程序掀起新零售红利狂潮!
- 无人驾驶系列——深度学习笔记:Tensorflow的安装-windows系统
- 2018年12大顶级云安全威胁
- 缤果盒子为域名意识打call 六位数秒下bingobox.com
- 用Qt写软件系列二:QCookieViewer(浏览器Cookie查看器)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C语言小笔记(1)
- 这一次搞懂Spring的XML解析原理
- 这一次搞懂Spring自定义标签以及注解解析原理
- 这一次搞懂Spring的Bean实例化原理
- 单片机入门学习十三 STM32单片机学习十 通用定时器
- Spring IOC原理补充(循环依赖、Bean作用域等)
- 这一次搞懂Spring代理创建及AOP链式调用过程
- 这一次搞懂Spring事务注解的解析
- 这一次搞懂Spring事务是如何传播的
- 这一次搞懂SpringMVC原理
- 这一次搞懂Spring Web零xml配置原理以及父子容器关系
- 这一次搞懂SpringBoot核心原理(自动配置、事件驱动、Condition)
- 全网最深分析SpringBoot MVC自动配置失效的原因
- Mybatis源码初探——优雅精良的骨架
- 深入Mybatis源码——配置解析