java中的数据结构——Collection

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)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值