当前位置: 首页 / 技术干货 / 正文
好程序员Java教程之数据结构知识梳理

2020-02-08

Java教程 Java培训 好程序员

  好程序员Java教程之数据结构知识梳理,Java是一门面向对象编程语言,具有功能强大和简单易用两大属性。Java工具包提供了强大的数据结构,包括枚举、位集合、向量、栈、字典、哈希表、属性等接口类。接下来就给大家进行简单的知识梳理。

图片5

  Java中有几种常用的数据结构,主要分为Collection和map两个主要接口(接口只提供方法,并不提供实现),程序中终使用的数据结构是继承自这些接口的数据结构类。

  ArrayList、LinkedList、Vector有什么区别?

  ArrayList

  1)只能装入引用对象(基本类型要转换为封装类);

  2)线程不安全;

  3)底层由数组实现(顺序表),因为由顺序表实现,所以会具备顺序表的特点,如:需要声明长度、超出长度时需要进行扩容、不适合频繁的移动删除元素、检索元素快;

  4)capacity默认为10,超出时,capacity自动增长0.5倍(oldCapacity >> 1)。

  Vector:

  1)只能装入引用对象(基本类型要转换为封装类);

  2)Vector通过synchronized方法线程安全;

  3)底层也由数组实现;

  4)capacity默认为10(在构造方法中),超出时增长capacityIncrement的量,capacityIncrement小于等于0时,则增长1倍((capacityIncrement > 0) ? capacityIncrement : oldCapacity)。

  LinkedList

  1)只能装入引用对象(基本类型会转换为封装类);

  2)线程不安全;

  3)底层实现为链表,具备链表的特点,如:不用声明长度、检索性能较差,但是插入移动删除较快。

  4)链表通过Node对象实现。

  链表与数组的区别

  数组在使用之前必须定义大小,而且不能动态定义大小,会造成给数组分配了太多的单元而浪费了宝贵的资源,糟糕的一面是,程序运行时需要处理的数据可能多于数组的单元。

  当需要动态的减少或增加数据项时,可以使用链表这种数据结构。

  为什么使用散列表?

  对于数组和链表这两种数据结构,如果要查找它们存储的某个特定元素却不知道它的位置,就需要从头开始访问元素直到找到匹配的为止;如果数据结构中包含很多的元素,就会浪费时间。这时好使用散列表来存储要查找的数据。

  List接口主要实现类包括:

  ArrayList():代表长度可以改变得数组。可以对元素进行随机的访问,向ArrayList()中插入与删除元素的速度慢。

  LinkedList():在实现中采用链表数据结构。插入和删除速度快,访问速度慢。

  对于List的随机访问来说,就是只随机来检索位于特定位置的元素。List的get(int index)方法放回集合中由参数index指定的索引位置的对象,下标从“0” 开始。基本的两种检索集合中的所有对象的方法。

  使用HashSet判断主键是否存在

  HashSet实现Set接口,由哈希表(实际上是HashMap)实现,但不set的迭代顺序,并允许使用null元素。HashSet的时间复杂度跟HashMap一致,如果没有哈希冲突则时间复杂度为O(1),如果存在哈希冲突则时间复杂度不超过O(n)。所以,在日常编码中,可以使用HashSet判断主键是否存在。

  所有Java开发工程师在日常开发工作中,离不开Java常用数据结构,企业在招聘过程中也会考察求职者对Java数据结构的掌握,因此你要对数据结构给予高度重视。

如果你想了解多Java学习资料,可以关注“好程序员”微信公众号,定期发布技术热点和行业分析,助力你快入行。


好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
在线咨询
试听
入学教程
立即报名

Copyright 2011-2020 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号