热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

详解JAVA中的Collection接口和其主要实现的类

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set,详细信息可见官方文档http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/Collection.html,下面我们来讨论继承它的接口list,Set,这两个接口实现了主要的方法,但是还是有一些拓展的,不如list中的迭代就和collection中的有些不同,下面会详细介绍,这里我们用一个例子体会一下这里的接口的实现:

Collection list=new LinkedList<>(); 

list

  1. list是有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
  2. list与Set不同,list允许重复的元素插入
  3. list接口提供了两种在列表的任意位置高效插入和移除多个元素的方法。
  4. 下面我们来具体介绍一下它的实现的类

 LinkedList

从文档中可以看到这个listedList实现的不只是list接口,比如还是实现了Deque接口,这个为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。这里的LinkedList都是用双向链表实现的,这个类不是同步的,因此在多个线程中有修改其中的元素操作时必须实现外部的线程同步

构造方法

  1. LinkedList() 创建一个空的链表
  2. LinkedList(Collection<&#63; extends E> c) 构造一个包含指定 collection 中的元素的列表,这些元素按其 collection 的迭代器返回的顺序排列,构造如下:
 ArrayList arrayList=new ArrayList<>(); //这里新建一个线性列表
 LinkedList linkedList=new LinkedList(arrayList); //用线性列表新建一个链表
 System.out.println(linkedList.getFirst()); 

方法摘要

  1. boolean add(E e) 将指定元素添加到此列表的结尾。成功插入返回True
  2. void add(int index, E element) 在此列表中指定的位置插入指定的元素。
  3. boolean addAll(Collection<&#63; extends E> c) 添加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序。例子如下:
ArrayList arrayList=new ArrayList();//新建一个线性表
 arrayList.add(10);
 arrayList.add(100);
 arrayList.add(2);
 LinkedList linkedList=new LinkedList();
 linkedList.add(100);
 linkedList.add("chenjiabing");

 linkedList.addAll(arrayList); //将线性表中所有的元素添加到链表中
 for(Object i:linkedList)
 {
  System.out.println(i);
 }
  1. boolean addAll(int index, Collection<&#63; extends E> c) 将指定 collection 中的所有元素从指定位置开始插入此列表。
  2. addFirst 将指定的元素添加到开头
  3. addLast 将指定的元素添加到末尾
  4. clear() 从列表中移除全部的元素
  5. clone() 得到一个链表的副本,由于其返回的类型是Object,因此需要进行强制转换成LinkedList类型
LinkedList list=(LinkedList)linkedList.clone();
  1. contains(Object o) 如果此列表中包含元素o返回True
  2. element() 获取但不移除此列表的头(第一个元素)。
  3. iterator() 返回列表中的元素的迭代器
Iterator iter=list.iterator(); //返回一个迭代器类型
while(iter.hasNext()) //判断迭代器中是否存在元素
{
 Object o=iter.next(); 
 if(o.equals(1))
 {
 System.out.println(o); //输出迭代器中的元素
 iter.remove(); //移除这个元素,这个是从列表中直接移除的
}

}
  1. listIterator() 返回此列表中的元素的列表迭代器(按适当顺序),从列表中指定位置开始
ListIterator iterator = list.listIterator();
 while (iterator.hasNext()) //首先将迭代器一直运行到末尾
 {
  Object o = iterator.next();
  if (o.equals(1)) {
  iterator.add(100); //将元素插入到当前元素的前面,这个在Iterator是不存在的方法
  }

 }

 while (iterator.hasPrevious()) //这时的迭代器是从末尾开始的,因此这里相当与逆序输出
 {
  System.out.println(iterator.previous());
 }

get(int index) 返回此列表中指定位置处的元素。这里要注意的是虽然这种方式能够得到指定索引的值,但是这里对于链表中的操作开销是非常大的,因此这个方法不主张使用,如果需要遍历列表可以使用迭代器和for-each语句

LinkedList list=new LinkedList();
for(int i=0;i<10;i++)
{
 list.add(i);
}
for(Object o:list){ //使用for-each遍历列表
System.out.println(o); 
}

Iterator iter=list.iterator(); //返回一个迭代器类型

while(iter.hasNext()) //判断迭代器中是否存在元素
{
 System.out.println(iter.next()); //输出迭代器中的元素
}
  1. getFirst() 返回此列表的第一个元素。
  2. getLast() 返回此列表的最后一个元素
  3. indexOf(Object o) 返回元素第一次出现的索引
  4. lastIndexOf(Object o) 返回元素最后一次出现的索引
  5. toArray() 返回以适当顺序(从第一个元素到最后一个元素)包含此列表中所有元素的数组
  6. set(index,element) 将指定索引的元素替换成element
  7. size() 返回元素的个数
  8. remove() 移除表头的元素
  9. remove(index) 移除此列表中指定位置处的元素。

ArrayList

  1. List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于 Vector 类,除了此类是不同步的。)
  2. 每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。
  3. 注意,此实现不是同步的。如果多个线程同时访问一个 ArrayList 实例,而其中至少一个线程从结构上修改了列表,那么它必须 保持外部同步。(结构上的修改是指任何添加或删除一个或多个元素的操作,或者显式调整底层数组的大小;仅仅设置元素的值不是结构上的修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedList 方法将该列表“包装”起来

构造函数

  1. ArrayList() 构造一个初始容量为 10 的空列表。
  2. ArrayList(Collection<&#63; extends E> c) 构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
  3. 构造一个具有指定初始容量的空列表。

方法摘要

  1. 由于和LinkedList继承了同一个接口,因此大部分的函数都是相同的,只是在拓展了一些特有的方法,共有的方法有:add,addAll,get,clone,clear,contains,indexOf,remove,set,size,toArray,lastIndexOf,iterator,listIterator。特有的方法如下:
  2. isEmpty() 如果此列表中没有元素,则返回 true
  3. void trimToSize() 将此 ArrayList 实例的容量调整为列表的当前大小。因为这里的线性列表的容量会随着加入的元素而增加,因此这个函数的作用就是将线性列表的的容量变成当成元素的大小

 Vector

  1. Vector类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作
  2. 每个向量会试图通过维护 capacity 和 capacityIncrement 来优化存储管理。capacity 始终至少应与向量的大小相等;这个值通常比后者大些,因为随着将组件添加到向量中,其存储将按 capacityIncrement 的大小增加存储块。应用程序可以在插入大量组件前增加向量的容量;这样就减少了增加的重分配的量。
  3. 从源码中可以看出Vector是线程安全的,源码中的插入和删除操作都实现了进程的同步语句块,因此Vector的插入和删除是比较低效的

构造函数

  1. Vector() 构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零。
  2. Vector(Collection<&#63; extends E> c) 构造一个包含指定 collection 中的元素的向量,这些元素按其 collection 的迭代器返回元素的顺序排列。
  3. Vector(int initialCapacity) 使用指定的初始容量和等于零的容量增量构造一个空向量。
  4. Vector(int initialCapacity, int capacityIncrement) 使用指定的初始容量和容量增量构造一个空的向量。
  5. 注意:使用第一种方法系统会自动对向量进行管理,若使用后两种方法。则系统将根据参数,initialcapacity设定向量对象的容量(即向量对象可存储数据的大小),当真正存放的数据个数超过容量时。系统会扩充向量对象存储容量.

方法摘要

同样是继承了List接口,因此大部分的方法都是一样的,比如add,addAll,clear,clone,contains,remove,removeall

stack

Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。
注意:这里的stack虽然继承了了Iterator接口但是如果使用了迭代的话它输出的还是原来你输入的顺序,这里就违背了栈的原理后进先出

构造方法

Stack() 创建一个空堆栈。

方法摘要

  1. isEmpty() 测试堆栈是否为空。
  2. peek() 查看堆栈顶部的对象,但不从堆栈中移除它。
  3. pop() 移除堆栈顶部的对象,并作为此函数的值返回该对象。
  4. push(E element) 把项压入堆栈顶部。
  5. search(Object o) 返回对象在堆栈中的位置,以 1 为基数。

以上所述是小编给大家介绍的JAVA中的Collection接口和其主要实现的类详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • 当前物联网领域十大核心技术解析:涵盖哪些关键技术?
    经过近十年的技术革新,物联网已悄然渗透到日常生活中,对社会产生了深远影响。本文将详细解析当前物联网领域的十大核心关键技术,包括但不限于:1. 军事物联网技术,该技术通过先进的感知设备实现战场环境的实时监测与数据传输,提升作战效能和决策效率。其他关键技术还包括传感器网络、边缘计算、大数据分析等,这些技术共同推动了物联网的快速发展和广泛应用。 ... [详细]
  • 在使用 `requests` 库进行 HTTP 请求时,如果遇到 `requests.exceptions.SSLError: HTTPSConnectionPool` 错误,通常是因为 SSL 证书验证失败。解决这一问题的方法包括:检查目标网站的 SSL 证书是否有效、更新本地的 CA 证书库、禁用 SSL 验证(不推荐用于生产环境)或使用自定义的 SSL 上下文。此外,确保 `requests` 库和相关依赖项已更新到最新版本,以避免潜在的安全漏洞。 ... [详细]
  • C++入门必备:首个博客知识点汇总
    本文总结了C++初学者需要掌握的关键知识点,特别强调了成员类型的区分。其中,protected成员与private成员在本类中的作用相同,但protected成员允许派生类的成员函数访问,而private成员则不允许。此外,文章还介绍了其他重要的C++基础概念,如类的构造函数、析构函数以及继承机制,为初学者提供了一个全面的学习指南。 ... [详细]
  • 在使用Block时,正确的声明方法和确保线程安全是至关重要的。为了保证Block在堆中分配,应使用`copy`修饰符进行声明,因为栈中的Block与栈的生命周期绑定,容易导致内存问题。此外,还需注意Block捕获外部变量的行为,以避免潜在的循环引用和数据不一致问题。建议深入研究相关文档,以掌握更多高级技巧和最佳实践。 ... [详细]
  • Ant Design 版本中 Typography 等组件引入问题及解决方案
    本文探讨了在使用 Ant Design 时遇到的 Typography 等组件引入问题,主要原因是不同版本之间的不兼容性导致文档中的教程与实际安装的 Node 包内容不符。为了解决这一问题,建议将 Ant Design 更新至最新版本(4.x,注意 3.x 版本不兼容)。通过更新,可以确保所有组件和方法的正常运行,避免因版本差异带来的开发障碍。 ... [详细]
  • PHP与MySQL的Web应用开发技术深入解析
    PHP与MySQL的Web应用开发技术深入解析 ... [详细]
  • 如何在重装系统时正确设置UEFI和Legacy模式?一篇文章教你搞定! ... [详细]
  • 如何在OPPO R9上设置隐私相册功能? ... [详细]
  • 在分析Socket服务器程序接收中文数据时出现的乱码问题时,我们发现客户端使用C#编写的数据在返回时能够正常显示。本文详细探讨了该问题的成因,并提出了一种有效的解决方案。通过调整字符编码设置和优化数据传输格式,确保了中文数据在传输过程中的完整性与正确性。具体实现代码包括对Socket读取事件的处理,确保数据以正确的编码格式进行解析和显示。 ... [详细]
  • 蜘蛛表格:全面解析与应用指南
    蜘蛛表格:全面解析与应用指南 ... [详细]
  • “没有变量的机器人如同没有灵魂。”本文详细介绍了安川机器人中位置变量的解析方法与配置技巧,帮助维护人员更好地理解和操作这些关键参数。通过深入探讨变量的功能和应用场景,本文为技术人员提供了实用的指导,确保机器人在各种任务中能够高效、准确地运行。 ... [详细]
  • 在 Python 中,列表(list)是一种内置的数据类型,属于有序且可变的集合,支持随时添加或删除元素。此外,Python 还提供了多种独特的数据结构,如字典(dict)、集合(set)和元组(tuple),每种数据结构都有其特定的应用场景和优势。了解这些数值类型和数据结构对于高效编程至关重要。 ... [详细]
  • 本文探讨了利用Python编程语言开发自动化脚本来实现文件的全量和增量备份方法。通过详细分析不同备份策略的特点,文章介绍了如何使用Python标准库中的os和shutil模块来高效地管理和执行备份任务。此外,还提供了示例代码和最佳实践,帮助读者快速掌握自动化备份技术,确保数据的安全性和完整性。 ... [详细]
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
  • 为了评估精心优化的模型与策略在实际环境中的表现,Google对其实验框架进行了全面升级,旨在实现更高效、更精准和更快速的在线测试。新的框架支持更多的实验场景,提供更好的数据洞察,并显著缩短了实验周期,从而加速产品迭代和优化过程。 ... [详细]
author-avatar
dhailing
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有