集合对象与常用数据结构性能分析
来源:互联网 发布:世界手机域名 编辑:程序博客网 时间:2024/06/01 19:07
1.数组的回顾与排序
基本类型的数组
对象数组
java.util.Arrays
Comparable接口
数组的不足之处:
容量不能自动调整
查找效率低
可采用Arrays.binarySearch方法,但必须实现Comparable接口
binarySearch方法本身的效率也不高
2.泛型
(1)泛型(Generic)是参数化类型的能力
可以在类,接口或者方法中声明一个泛型类型,并且在使用这个类,接口或者方法的时候指定具体的类型
public class Dog implements Comparable<Dog> { //… public int compareTo(Dog dog) { return name.compareTo(dog.name); }}
(2)泛型的定义格式举例
public class ArrayList<E> { public E get(int index){ … } public void add(E e) { … } … }public TreeSet(Collection<? extends E> c) { … }常用集合框架接口和实现类public TreeSet(Comparator<? super E> comparator) { … }public interface Comparator<T> { … }
3.常用集合框架接口和实现类*重点内容*
(1)集合框架结构
Collection:
表示一组对象
基本操作
add-添加一个元素
addAll-添加另一个Collection中所有元素
contains-是否包含某个元素
remove-从集合中删除一个元素
removeAll,containsAll,retainAll
isEmpty-集合中是否有元素
size-集合中元素的个数
clear-清空所有元素
toArray-转成一个数组
iterator-得到一个用于遍历该集合的迭代器
List:
继承Collection接口
特性
元素具有顺序
元素可以重复
新增操作
set –将元素放入指定位置
get –取得指定位置的元素
ArrayList:
特性
使用数组实现的List,自动调整容量
新增操作
indexOf/lastIndexOf 查找某个元素在ArrayList中的位置
ensureCapacity/trimToSize 调整内置数组的长度
可以对元素快速的随机访问;
向ArrayList插入或删除元素的速度较慢
LinkedList:
特性
使用链表形式实现的List
可以方便的实现栈、队列、双向队列
新增操作
addFirst/addLast实现将元素插入到列表的开头或结尾
getFirst/getLast返回此列表中的第一个或最后一个元素
removeFirst/removeLast移除并返回此列表中的第一个或最后一个元素
便于元素的插入和删除,随即访问的速度较慢
访问集合的标准操作
(1)for循环 / foreach循环
(2)Iterator:
Iterator接口用途是把集合中元素的内容按序排列取出后,可一个个读取
方法
hasNext-如果仍有元素可以迭代,返回 true
next-返回迭代的下一个元素
remove-从迭代器指向的集合中移除迭代器返回的最后一个元素
代码
Iterator iterator = list.iterator();
while(iterator.hasNext()) {
Object o = iterator.next();
}
(3)ListIterator
ListIterator接口继承了Iterator接口,并作了扩展 (API – java.util.ListIterator)
1). ListIterator有add()方法,可以向List中添加对象,而Iterator不能
2). ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以
3). ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能
4). ListIterator的set()方法可以实现对象的修改。Iterator仅能遍历,不能修改
(4)Enumeration输出
Enumeration已经不是主流,Iterator是它的下一代替代品。构建一个Enumeration迭代器 :Enumeration enumeration= 被迭代的集合对象.elements()
实现该接口的对象由一系列的元素组成,可以连续地调用nextElement()方法来得到 Enumeration枚举对象中的元素
Set:
继承Collection接口
特性
元素没有顺序
元素不可以重复
HashSet类:
基于HashMap实现
HashSet是无序集合的类
LinkedHashSet:按照插入集合的顺序提取集合中的元素
因操作 (查询、插入、删除等)速度快,比较适用于内容规模较大的元素
SortedSet接口:
扩展了Set接口
元素按升序排序
添加到SortedSet实现类的元素必须实现可比较Comparable接口,否则我们必须给它的构造方法提供一个Comparator接口的实现。
SortedSet常用方法:
public Object first()
public Object last()
public SortedSet headSet(Object toElement)
public SortedSet tailSet(Object fromElement)
TreeSet类:
实现了SortedSet接口
是有序的集合类
基于HashMap实现
采用平衡二叉树的实现方式
操作速度较慢
遍历Set
使用迭代Iterator遍历
foreach循环遍历
Map:
表示一个映射
特性
将键映射到值
键不能重复
值可以重复
方法
put-添加一个“值”(想要的东西)和与“值”相关联的“键”(使用它来查找)
keySet-返回由Map的“键”组成的Set(确保不重复)
get-返回与给定“键”相关联的“值”
values-返回一个Collection,包含Map中的所有“值”(可重复)
Map实现类的比较
HashMap
以哈希表为内核实现Map接口
key-value pairs的顺序和放入的顺序无关。
Key不能重复, 后加入的值会覆盖原来的值
LinkedHashMap
以哈希表和链表为内核实现map接口
key-value pairs的顺序是放入的顺序。
Key不能重复, 后加入的值会覆盖原来的值
TreeMap
以二叉树为内核实现map接口
key-value pairs的顺序是按照key的升序进行排列
Key不能重复, 后加入的值会覆盖原来的值
4.常用数据结构分析
数组:长度固定,改变长度时,需要新建数组
线性表:类似于数组,实现类有ArrayList等
链表:不支持快速随机访问,修改、删除操作速度快,只修改链接即可,不影响其他元素
使用链表实现的集合类 LinkedHashMap LinkedHashSet LinkedList
哈希表:数据以key value paired的形式存在
一个元素包含一个key和一个value
由key可以取得value
数据读取速度快
占用较多内存空间
二叉树:有排序的功能
数据的存取较慢
使用二叉树实现的集合类: TreeMap TreeSet
5.工具类Collections的API
在JDK中提供了操作数组的java.util.Arrays类,为操作java数组提供了一系列的静态方法
在JDK中,提供了java.util.Collections 类,可以用于操作List类型的集合,也可以用于操作所有的Collection类型或Map类型的集合
Collections类以下的方法操作List类型的集合
(1)调用其静态方法,可实现
binarySearch():折半查找
sort(): 排序
reverse():将线性表进行逆序操作
rotate():以某个元素为轴心将线性表“旋转”
swap():交换一个线性表中两个元素的位置
。。。(查API,阅读源码)
- 集合对象与常用数据结构性能分析
- 《c++程序性能优化》——常用数据结构性能分析
- Statement对象与PreparedStatement对象性能分析
- JAVA 常用集合 数据结构
- 对象copy源码分析与性能测试
- Java集合与数据结构
- Java集合与数据结构
- java 常用集合分析
- 常用集合的底层数据结构
- Java集合框架常用类源码分析与总结
- java常用集合性能比拼
- Unity3D中常用的数据结构总结与分析
- Unity3D中常用的数据结构总结与分析
- Unity3D中常用的数据结构总结与分析
- Unity3D中常用的数据结构总结与分析
- Unity3D中常用的数据结构总结与分析
- 数据结构与算法分析之----各种常用排序详解
- Unity3D中常用的数据结构总结与分析
- C++中的“:”的作用
- c++第一课
- C# Windows-API-Code-Pack文件选择对话框实例
- 【LightOJ 1122 + dp】
- 复合对象复制非静态数据
- 集合对象与常用数据结构性能分析
- LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 不使用第三方 SDK 实现简单分享 -- Android 学习之路
- 51nod1179【思维】
- 8-框架
- PHPWord 导出生成word
- C++中的构造函数
- 前端:将网站打造成单页面应用SPA
- 阿弥陀佛么么哒 - 笔记