浅谈Java中Collection、Iterable、List、ArrayList间的关系

安装Anaconda和Labelme的教程 1 登录Anaconda官网,选择Download https://www.anaconda.com/distribution/ 2 选择你想下载的Python版本,选择你的操作系统和位数,然后点击Download按钮就开始下载了 3 开始安装 下面两个框框都勾选 点击next,等待安装成功 打开Anaconda Navigator 点击红色圈圈的按钮 在cmd中输入 (1)创建虚拟环境 conda create -n labelme python=3.6 (2)激活虚拟环境 conda activa 阅读详情

        Java是一个高级语言,它提供了很多现成的数据结构,给我们的编程带来了极大的遍历。这都是由Java编程的高手给出的,学习这里面的实现方式无论是对于我们使用这些工具还是对于掌握Java的编程之道都是很有帮助的。本文主要讲述Java中的表的实现方式。

        首先来介绍Collection接口:Collection位于Java的java.util包中。顾名思义,Collection就是用来实现集合的接口;集合的种类有很多,Collection接口抽象出来了集合都具有的特性。例如添加、删除、得到集合中的元素个数、检测某一元素是否存在在该集合... ...

public interface Collection<AnyType> extends Iterable<AnyType> {
	int size( );
	boolean isEmpty( );
	void clear( );
	boolean contains( AnyType x );
	boolean add( AnyType x );
	boolean remove( AnyType x );
	java.util.Iterator<AnyType> iterator( );
}
        这里的方法都不难理解,方法名都很直白,但是Collection继承的Iterable接口以及要实现的Iterator方法并没有那么简单。Iterable的意思是可迭代的,说白了就是用来存储数据的集合都是要能够实现遍历的,因为遍历一个集合是一个集合所必备的。这个接口要求所有继承了该接口的类都要能够得到一个迭代器也就是iterator方法,它返回一个Iterator接口类型的数据,而Iterator接口要求实现三个方法:

public interface Iterator<AnyType> {
	boolean hasNext( );
	AnyType next( );
	void remove( );
}
         看到这里也许有些人会感到疑惑,这只是一个迭代器,只要关心遍历的问题就好了,为什么还要多此一举加一个删除的方法呢?光从迭代器要实现遍历集合这个功能来讲remove()方法确实没有存在的必要,但是如果我们仔细想一想我们究竟要用什么样的方式来遍历集合的话就可以理解remove()方法存在的必要性了。Iterator中的remove()方法是用来删除上一次next()方法返回的元素的。这一机制的好处是这样的删除不需要额外的定位工作,如果我们想通过循环的方式找到一些特定的元素并删除他们,那么用迭代器中的remove()方法是最明智的选择。另一方面,如果在用迭代器遍历集合的过程中删除了之前遍历的元素使得集合总体元素个数变少,这样就有可能导致hasNext()方法失败。如果这样的情况发生了,那么Iterator就不是一个完备的接口,因此remove()方法是必不可少的。

        有了前面的论述,我们知道了Iterator的实现原理和运行机制,但是具体是如何实现的呢?真正的Java代码中是如何实现删除上一次遍历到的元素又不影响遍历的正常运行的呢?

        先来看一下ArrayList的实现方式:ArrayList是以数组为基础的类,继承了List接口,而List接口又继承了Collection接口。List接口在Collection的基础上又增加了一些属于表这种数据结构专有的一些操作,比如get()和set()方法,可以通过给定下标得到或修改该位置的元素,但这些实现原理较为简单,我们不做过多的论述,重点放在迭代器的remove()方法上。

public class MyArrayList<AnyType> implements Iterable<AnyType> {
    private int theSize;
    private AnyType [ ] theItems;

    public MyArryList( ) {...}
    ... ...
    public int size( ) {...}
    public boolean isEmpty( ) {...}
    public AnyType get( int index ) {...};
    public AnyType set( int index, AnyType newData) {...};
    public boolean add( AnyType x ) {...};
    public void add( int index, AnyType x ) {...};
    public AnyType remove( int index ) {
        AnyType removeItem = theItem[ index ];
        for( int i = index; i < this.size( ); i++ ) {
            theItem[ i ] = theItems[ i + 1 ];  
        }
        this.theSize--;
        return removeItem;
    }

    private java,util.Iterator<AnyType> iterator( ) {
        return new ArrayListIterator( );
    }

    private class ArrayListIterator implements java.util.Iterator<AnyType> {
        private int count = 0;

        public boolean hasNext( ) {
            return count < size( );
        }

        public AnyType next( ) {
            if( !hasNext( )) {
                throw new java.util.NoSuchElementExcption( );
            }
            return theItems[ current++ ];
        }

        public void remove( ) {
            MyArrayList.this.remove( --current );
        }
    }
}
        这里对于iterator()方法是用一个内部类实现的,这样做的好处在于可以使用之前程序写好的remove()代码,使得代码得以复用。

        总结:Collection是所有集合类都要继承的一个借口,它保证了集合一定存在增加和减少元素的方法,而且它还继承了Iterable接口,这使得所有集合类都拥有一个迭代器,都可以用迭代器来进行结合中的元素的遍历;Iterator接口提供了一套较为完整的遍历集合的机制,使得对集合的遍历更加方便与快捷;List是表的意思,通过字面意思我们就不难理解,表当然是一种集合,是“集合”这个概念的真子集,那么它当然应该继承Collection接口,也自然应该拥有一个迭代器。而ArrayList则是用数组方式实现的表,它自然应该继承List接口,它是一个真真正正的实体,是真正用来表示“表”这一数据结构的,而它的实现,在Collection、Iterator、List给出后,我们就只需要写每一个方法里面的代码就好,其他的架构不需要过多的思考,而它也自然而然的属于List,属于Collection。


参考文献:《数据结构与算法----Java语言描述》       马克.艾伦.维斯






MIPI CPHY学习笔记01:TX物理层一致性测试项解析(LP信令模式) 在手机、平板、智能手表等移动设备中,MIPI C-PHY是负责图像、数据传输的核心接口,它就像设备内部的“高速数据线”,而低功耗(LP)信令模式,是这条“数据线”的“省电模式”,专门用于设备待机、低负载等场景,既要保证信号稳定,又要最大限度降低功耗。物理层一致性测试,就是给这个“省电模式”做的“全面体检”,确保不同厂商的设备能兼容互通。今天,我们就聚焦MIPI C-PHY TX(发射端)的Group 1 LP信令测试,用通俗的语言拆解8个核心测试项,看懂“省电信号”的合格标准。 阅读详情

相关推荐

103:vue+cesium 设置球体水部分颜色为黄色

本示例在 Vue + cesium 项目中设置球体水部分颜色为黄色。这里的操作是将球体内部设置为空的,在地球内部添加一个黄色的圆球,这样水的部分就被突出出来了。直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果.

大剑师兰特的GIS世界 592

JavaCollection 接口List接口ArrayList/LinkedList/Vector的异同、set接口、HashSet/LinkedHashSetTreeSet

1. Java集合概述 1.1 Java集合作用: Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的 关联数组。 1.2 Java 集合可分为 Collection 和 Map 两种体系 Collection接口:单列数据,定义了存取一组对象的方法的集合 List:元素有序、可重复的集合 Set:元素无序、不可重复的集合 Map接口:双列数据,保存具有映射关系“key-v...

weixin_44514198的博客 595

【VTKExamples::Meshes】第十二期 QuadricDecimation

本文分享VTK样例QuadricDecimation,并解析接口vtkQuadricDecimation,希望对各位小伙伴有所帮助!

qq_40041064的博客 313

java期末复习题】第9章 集合

第9章 集合 一、选择题 1.下列哪些方法不是在Collection接口中定义的?( ) A.iterator() B.isEmpty() C.toArray() D.setText() 2.如果希望数据有序存储并且便于修改,可以使用哪种Collection接口的实现类?( ) A.LinkedList B.ArrayList C.TreeMap D.HashSet 3.如果希望数据有序存储并且便于查询,可以使用哪种Collection接口的实现类?( ) A

DynamoTUO的博客 4977

javacollection ,List, ArrayList,LinkedList,Vector之间关系和区别

Collection:集合接口List, ArrayList,LinedList,Vector均是其子类实现 以下为Java10文档的描述 Modulejava.base Packagejava.util Interface Collection&lt;E&gt; Type Parameters: E- the type of elements in this colle...

小王先森的代码笔记 1194

Collection接口与Iterator接口

文章目录Collection接口与Iterator接口1. Iterable接口2. Iterator接口3. Iterator接口的实现类4.遍历4.1 概述4.2 用foreach()来遍历集合4.3 用forEach()方法来遍历4.4 用Iterator接口的实现类提供的 hasNext(),next()遍历集合4.5 用Iterator接口的实现类提供的forEachRemaining()方法来遍历集合5. Collection定义的操作集合元素的方法 Collection接口与Iterator接

weixin_45791318的博客 1273

数据结构中List的继承体系(Iterable接口Collection接口

1. Iterable接口List是线性表,即n个具有相同类型元素的有限序列,在该序列上可以执行增删改查以及变量等操作,这是List的逻辑角度。而从List的语法角度来看,它是一个接口List接口继承自Collection接口Collection接口继承自Iterable接口。1. Iterable接口Iterable接口中只有3个方法,这里用到的是抽象方法iterator()。

AwwzJ_0821的博客 1541

Java集合框架深度学习:从IterableArrayList的完整继承体系

系统剖析Java集合框架的继承体系。从顶层Iterable接口开始,逐层深入CollectionList接口,解析AbstractCollection和AbstractList抽象类的设计意义,揭示Java集合框架“接口定义规范-抽象类提供默认实现-具体类完成核心功能”的分层设计思想。

qq_17862337的博客 880

数据结构:4.List的认识

本章概述Java集合框架中List体系的结构,阐明IterableCollection的继承关系及核心职责,并指出ArrayList、LinkedList、Stack为其主要实现类。

2602_95646088的博客 355

【数据结构】ListArrayList

Java List接口与顺序表实现 本文介绍了Java集合框架中的List接口及其实现原理。List是继承自Collection的线性表接口,具备有序元素管理能力。文章首先分析了List接口的定义和核心方法,包括继承自Collection的基础方法和List特有的位置操作方法。 重点介绍了顺序表(数组实现)这一线性表的物理存储结构,并详细演示了如何自定义实现顺序表(MyArrayList)。包括: 异常类设计(空表异常和索引非法异常) 核心成员变量和构造方法 工具方法实现(边界校验、动态扩容) 核心功能实现

记录了从0学习Java技术栈的日常 1233

JavaIterableCollectionList 的常见方法签名以及含义

1.首先谈谈什么是方法签名? 在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量,那为什么类中就可以定义方法名相同的方法呢? 方法签名即:经过编译器修改过之后方法最终的名字。具体方法:方法全路径名+参数列表+返回值类型,构成方法完整的名字。 2.Iterable 常见方法:Iterator<T> iterator() 返回 T类型的元素的迭代器Iterable是一种设计模式,开发人员无需了解序列的...

m0_63036262的博客 890

JAVA】整理 IterableCollectionList 的常见方法签名以及含义

方法签名以及IterableCollectionList 的常见方法签名以及含义。

Xian meng在努力呐-的博客 622

java基础巩固系列(九):持有对象之间的使用与关系IterableCollectionList、Queue、Set、Map、Stack)

java中的持有对象之间的继承关系

u010800530的专栏 3081

java list iterable_java - 将Iterable转换为Collection的简便方法

java - 将Iterable转换为Collection的简便方法在我的应用程序中,我使用第三方库(确切地说是MongoDB的Spring Data)。此库的方法返回foreach,而我的其余代码需要Collection。有什么实用方法可以让我快速将一个转换为另一个吗? 我想避免在我的代码中为这么简单的事情创建一堆foreach循环。Ula Krukar asked 2019-01-30T04...

weixin_34072003的博客 1141

Java中关于IterableCollectionList 的简介

Java中关于IterableCollectionList 的简介

m0_63501066的博客 574

【数据结构】IterableCollectionList 的常见方法签名以及含义

数据结构几种接口IterableCollectionList 的常见方法签名以及含义

qq_43581644的博客 271

java中的ArrayListList、LinkedListCollection关系详解

java中的ArrayListList、LinkedListCollection关系详解 一、基础介绍(Set、List、Map) Set(集):集合中的元素不按特定方式排序,并且没有重复对象。他的有些实现类能对集合中的对象按特定方式排序。 List(列表):集合中的元素按索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象。 Map(映射):集合中的每...

aijia7039的博客 265

【学习笔记】图示Collection\List\Set接口及其实现类的关系

简单画图总结了一下Collection\List|Set接口及其实现类的关系ArrayList, LinkedList, HashSet, LinkedHashSet, SortedSet, TreeSet的关系及各自的特点。

qq_38636076的博客 216

集合Collection接口ArrayList与及其背后的数据结构

文章目录一、Collection接口下的集合关系图二、包装类1.基本数据类型和包装类直接的对应关系2.包装类的装包(装箱)、拆包(拆箱)3.Integer包装类中特殊的valueOf方法三、ArrayList1.ArrayList简介2.ArrayList的使用2.1 ArrayList的构造方法2.2 ArrayList常见操作2.3 ArrayList的遍历2.4 迭代器ListIterator的ArrayList中add的关系3.ArrayList的扩容机制 一、Collection接口下的集合关系

ZJRUIII的博客 1565

Collection接口的介绍(List

②CopyOnWrite:"写入"操作时,先进行数组复制,然后在新数组中进行写入操作,然。:链表动态扩容,每添加一个节点,链表动态扩容一个元素空。特点:特点:先进后出FILO or 后进先出LIFO。:数组:Object[ ] elementData。:数组:Object[ ] elementData。:①通过“ReentrantLock”锁实现。:查找、遍历效率高;:数组:Object[] array。特点:有序、允许重复(值不唯一):插入、删除效率高,查找效率低。,它有三个子接口,分别是。

m0_64481525的博客 358

Java基础学习笔记-集合、CollectionListArrayList

集合概述 集合是一个大小可变的容器,容器中的每个数据称为一个元素 集合特点:类型可以不确定,大小不固定;集合有很多,不同的集合特点和使用场景不同 数组:类型和长度一旦定义出来就都固定 作用: 在开发中,很多时候元素的个数是不确定的 而且经常要进行元素的增删该查操作,集合都是非常合适的,开发中集合用的更多 存储结构 数据结构指的是数据以什么方式组织在一起,不同的数据结构,增删查的性能是不一样的 数据存储的常用结构有:栈、队列、数组、链表和红黑树 队列(queue):先进先出,后进后出。(

知梦的博客 456

MiXplorer 全能文件管理器v6.58.2付费版.txt打包整理.zip

MiXplorer 全能文件管理器v6.58.2付费版.txt打包整理.zip

相对论返波管慢波结构的优化设计和数值模拟 (2006年)

以环形电子束驱动的、正弦型周期慢波结构的相对论返波管(RBWO)为基础,设计了一种新型慢波结构的RBWO。采用数值模拟的方法对RBWO慢波结构的起始端和末端进行了优化设计,对微波工作频率进行了预测。在磁场为2.5T、二极管电压为710kV、电流为10kA的条件下,获得了频率为7.5GHz、微波功率为1.21GW、转换效率为26.6%的微波输出。研究结果表明这种慢波结构相对原结构在微波输出功率和转换效率上都有很大提高,微波工作频率与预测相符合。

上一篇: 高性能的贪吃蛇C语言实现
下一篇: 详谈线性表中带头节点与不带头结点链表
Judy_c
博客等级 码龄9年 21粉丝 10原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值