这篇文章主要介绍“Java超级接口List有哪些用法”,在日常操作中,相信很多人在Java超级接口List有哪些用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java超级接口List有哪些用法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!List
是Collection
三大直接子接口之一,其中的数据可以通过位置检索,用户可以在指定位置插入数据。List
的数据可以为空,可以重复。以下是其文档注释,只看前两段:An ordered collection (also known as a sequence). The user of this interface has precise control over where in the list each element is inserted. The user can access elements by their integer index (position in the list), and search for elements in the list.Unlike sets, lists typically allow duplicate elements. More formally, lists typically allow pairs of elements e1 and e2 such that e1.equals(e2), and they typically allow multiple null elements if they allow null elements at all. It is not inconceivable that someone might wish to implement a list that prohibits duplicates, by throwing runtime exceptions when the user attempts to insert them, but we expect this usage to be rare.我们关注其不同于Collection的方法,主要有以下这些:通过以上对接口的分析可以发现,Collection
主要提供一些通用的方 香港云主机法,而List
则针对线性表的结构,提供了对位置以及子表的操作。有了分析AbstractCollection
的经验,我们分析AbstractList
就更容易了。首先也看下其文档中强调的部分:To implement an unmodifiable list, the programmer needs only to extend this class and provide implementations for the get(int) and size() methods.To implement a modifiable list, the programmer must additionally override the set(int, E) method (which otherwise throws an UnsupportedOperationException). If the list is variable-size the programmer must additionally override the add(int, E) and remove(int) methods.大致意思是说,要实现一个不可修改的集合,只需要复写get
和size
就可以了。要实现一个可以修改的集合,还需要复写set
方法,如果要动态调整大小,就必须再实现add
和remove
方法。然后看下其源码实现了哪些功能吧:接下来,还有几个方法和Iterator
与ListIterator
息息相关,在AbstractList
中有具体的实现,我们先看看它是如何把集合转变成Iterator
对象并支持foreach
循环的吧。我们追踪源码发现,在iterator()
方法中直接返回了一个Itr
对象这样我们就明白了,它是实现了一个内部类,这个内部类实现了Iterator
接口,合理的处理hasNext
、next
、remove
方法。这个源码就不粘贴啦,其中仅仅在remove
时考虑了一下多线程问题,有兴趣的可以自己去看看。另外一个就是ListIterator
,可以看到,listIterator
方法依赖于listIterator(int index)
方法。有了上边的经验,我们可以推测,它也是通过一个内部类完成的。事实证明,和我们想的一样,AbstractList
内部还定义了一个ListItr
,实现了ListIterator
接口,其实现也很简单,就不粘贴源码啦。接下来我们看看,利用这两个实现类,AbstractList
都做了哪些事情。接下来还有两块内容比较重要,一个是关于SubList
的,一个是关于equals
和hashcode
的。我们先看看SubList
相关的内容。SubList
并不是新建了一个集合,只是持有了当前集合的引用,然后控制一下用户可以操作的范围,所以在接口定义时就说明了其更改会直接反应到原集合中。SubList
定义在AbstractList
内部,并且是AbstractList
的子类。在AbstractList
的基础上增加了对可选范围的控制。equals
和hashcode
的实现,也关乎我们的使用。在AbstractList
中,这两个方法不仅与其实例有关,也和其内部包含的元素有关,所以在定义数据元素时,也应该复写这两个方法,以保证程序的正确运行。这里看下其源码加深一下印象吧。到此,关于“Java超级接口List有哪些用法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注开发云网站,小编会继续努力为大家带来更多实用的文章!
这篇文章主要介绍“php常量和变量有什么不同”,在日常操作中,相信很多人在php常量和变量有什么不同问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php常量和变量有什么不同”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!1、常…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。