赞
踩
Java中的数据结构 分Map和Collection两种(Map和Collection都是接口)
Map的常用实现类:Hashmap、Hashtable、Treemap、LinkedHashmap、ConcurrentHashmap
Collection:
List:Vector、ArrayList、LinkedList
Set:HashSet、LinkedHashSet
List和Set区别:
1、List中元素放入是有顺序的,可以重复。Set去除重复元素,无序的,重复元素会覆盖掉。
2、Set检索效率低,删除和插入效率高,插入和删除不会引起元素位置的改变;而List和数组类似,可以动态增长,查找效率高,插入和删除效率低,会引起元素位置的改变。
Vector、ArrayList、LinkedList的特点:
ArrayList 底层是数组实现的,在声明时尽量指定长度。默认长度(容量)为10。非常适合用于查找,因为数组每个元素的内存空间是固定的,每次查询时,只需要去查询对应位置的内存空间,就可以很快找到相应的值。而数组不擅长的是添加和删除。线程不安全的,如果不考虑线程安全问题,一般使用ArrayList。
LinkedList 底层是链表实现的
Vector的底层也是数组实现的,和ArrayList一样都是封装了一个Object[],但Vector是一个比较古老的集合,JDK1.0就已经存在,建议不要使用这个集合,Vector是线程安全的,Vector的很多方法都加入了synchronized同步语句,来确保线程安全。不过效率比较低。
Arraylist和Linkedlist应用场景
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
因为ArrayList的底层是数组,对于随机访问效率高,增加和删除比较慢。
因为LinkedList的底层是链表,不适合随机访问,增加和删除效率比较快
数据:
ArrayList 是线性表(数组)
get() 直接读取第几个下标,复杂度 O(1)
add(E) 添加元素,直接在后面添加,复杂度O(1)
add(index, E) 添加元素,在第几个元素后面插入,后面的元素需要向后移动,复杂度O(n)
remove()删除元素,后面的元素需要逐个移动,复杂度O(n)
LinkedList 是链表的操作
get() 获取第几个元素,依次遍历,复杂度O(n)
add(E) 添加到末尾,复杂度O(1)
add(index, E) 添加第几个元素后,需要先查找到第几个元素,直接指针指向操作,复杂度O(n)
remove()删除元素,直接指针指向操作,复杂度O(1)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。