集合对象与常用数据结构性能分析

来源:互联网 发布:世界手机域名 编辑:程序博客网 时间: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,阅读源码)

0 0
原创粉丝点击