当前位置:网站首页 > Java教程 > 正文

java容器教程



java容器是前人为我们提供的一套用于存储数据和对象的工具。如果你学过C++的STL,可以与之类比。java容器又可以称为Java Collection Framework(JCF)。里面除了存储对象的容器之外,还提供了一套用于处理和操作容器里面的对象的一套工具类。
整体框架:
在这里插入图片描述
下面将介绍List、Set、Map以及工具类Collections和Arrays。

在这里插入图片描述

List:列表,是一个接口。它的实现类常用的有LinkedList、ArrayList和Vector。

  • LinkedList采用双向链表实现的列表,因此可以被用作队列、堆栈、双端队列;顺序访问高效,随机访问性能较差、适用于需要经常添加和删除的数据。
  • LinkedList不支持同步
 

运行结果:
在这里插入图片描述

  • ArrayList是采用数组实现的列表,因此它支持随机访问,操作。对于需要经常进行查询的数据建议采用此结构。
  • ArrayList与java数组的一个大的区别是ArrayList能够自动扩容
  • ArrayList不支持同步
 

运行结果:
在这里插入图片描述

Vector用法和ArrayList用法很相似,它们的区别在于Vector是线程同步的而且Vector有另外的遍历方式。这里将不再赘述。

对于不同的数据我们应该根据其特点采用不同的list,而不是一中list用到底。要学会灵活使用。

  1. 确定性:对任一对象都能判定它是否属于某一个集和
  2. 互异性:一个集和中不会存在两个相同(内容相同)的对象
  3. 无序性:集和里面的元素没有顺序
    在这里插入图片描述
    HashSet、LinkedHashSet、TreeSet里面存放的都要是对象,不能是基本数据类型。

基于散列函数的集和,采用HashMap实现,可以容纳null元素,不支持同步(可以通过Collections.synchronizedSet(new HashSet<…>()来使它同步)

 

运行结果:
在这里插入图片描述

继承HashSet ,基于散列函数和双向链表的集和,可以容纳null元素,通过双向链表维护了插入顺序,从而支持排序,但不支持同步(可以通过Collections.synchronizedSet(new HashSet<…>()来使它同步)

 

运行结果:
在这里插入图片描述

基于树结构的集和,印次支持排序,不能容纳null元素,同样不支持同步

 

在这里插入图片描述

  • 判定是否是重复元素的原则
    • HashSet、LinkedHashSet
    1. 判断两个对象的hashcode()是否相同,如果不同,返回flase
    2. 如果hashcode()相同,则调用equals()方法判断内容是否相同。相同返回true,不同返回flase
 
  • TreeSet
    添加到TreeSet里面的元素都必须实现comparable接口。因为在添加元素时会调用接口里面的compareTo()方法来比较是否是同一个元素。
 

运行结果:
在这里插入图片描述

Map是一类重要的数据结构。类似于数学中的函数,key对应自变量x、value对应因变量y、散列函数对用f
在这里插入图片描述

key和value都不能为空,HashTable是线程安全的、同步的,但只适合用于小数据量

 

运行结果:
在这里插入图片描述

HashMap允许有null,不支持同步(支持通过Collections.synchronizedMap(new Map<…,…>() 实现同步),所以线程不安全。但可以存储大量数据

 

运行结果:
在这里插入图片描述

基于双向链表用于维持插入顺序的HashMap,继承自HashMap

基于红黑树的Map,可以根据key的自然排序或者compareTo方法排序输出

继承自Hashtable。特有的方法有load()、store()等等。

Map的种类有很多,根据实际情况选择合适的Map。

Arrays处理的对象是数组,常用的方法包括排序sort、查找binarySearch、拷贝copy等等

 

Collections可以操作collections接口及其所有子类、常用的用法和Arrays差不多。但它的sort方法要求被排序对象实现了compareable接口或者传入一个compactor对象(主要针对某些类不能去被修改)

Arrays和Collections着两个工具类能够帮我们做很多事情,所以要熟练的应用。避免重复造轮子。

写到这,容器的基本知识应该都了解的差不多了,但这只能算是对容器入门了。只是学会了如何去使用。建议以后多多去查阅API和源码。了解其内部是如何实现这些结构的。当你能够自己写出来这些容器的实现时,才算真正的掌握了java容器。

  • 上一篇: java保养教程
  • 下一篇: java520教程
  • 版权声明


    相关文章:

  • java保养教程2024-12-12 19:10:06
  • .net java教程 pdf2024-12-12 19:10:06
  • weka java 使用教程2024-12-12 19:10:06
  • java多重循环教程2024-12-12 19:10:06
  • 图酱java安装教程2024-12-12 19:10:06
  • java520教程2024-12-12 19:10:06
  • 微信公众号 java 教程视频2024-12-12 19:10:06
  • java原型教程2024-12-12 19:10:06
  • 孙鑫java web视频教程2024-12-12 19:10:06
  • 前锋Java自学教程2024-12-12 19:10:06