当前位置:首页 > 英文周记 > 正文内容

collection接口「list继承了collection接口」

更新时间:2026-07-18 03:52:28 周记网4年前 (2023-01-28)英文周记125

Collection 接口

一个Collection(**)表示一组称为其元素的对象。Collection接口用来传递需要最大通用性的对象**。例如,按约定,所有**实现都有一个接收Collection的构造函数,称为转换构造函数,因此可以转换**的类型。

例如,有一个 CollectionString c,可能是List或Set,创建一个ArrayList:

Collection接口的基本方法

collection接口「list继承了collection接口」

Collection接口操作整个**的方法

Collection接口的数组方法

JDK 8 及其之后, Collection接口暴露了 StreamE stream() 和 StreamE parallelStream()方法,用于从基础**获取顺序流或并行流。(参考 聚合操作 )

三种方式:聚合操作,for-each,Iterator

JDK 8 及之后,推荐获取流执行聚合的方式遍历**。

如果**足够大且电脑核心数足够,可以使用并行流:

多种方式收集数据:

Iteratos接口,remove方法只能每次调用next后调用一次,否则会报错。

Iterator.remove是在迭代期间,唯一安全的删除元素的方法。

使用Iterator而不是for-eahc的情况:

大多情况下这些操作的效率较低。

例如,从Collection c中删除所有 e:

删除所有null:

Collections.singleton,一个静态方法,返回包含指定元素的不可变Set。

toArray作为**和旧api之间的桥梁,旧api希望在输入时使用数组。

将Collection转为与之长度一致的数组。

无参数时,返回一个Object数组

如果是CollectionString

哪些类实现或继承了collection接口?

Java**框架主要由Collection和Map两个根接口及其子接口、实现类组成。collection 的子接口包括List,set,queue。而Map包括三个实现类HashMap,HashTable,LinkeHashMap

Collection是最基本的**接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。

所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户**一个Collection。

Collection接口的总结

如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。

如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。

要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。

尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。

同步性

Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的**那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。

数据增长

从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制**中的对象。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个**所占的空间总是比你实际需要的要大。所以如果你要在**中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置**的初始化大小来避免不必要的资源开销。

使用模式

在ArrayList和Vector中,从一个指定的位置(通过索引)查找数据或是在**的末尾增加、移除一个元素所花费的时间是一样的,这个时间我们用O(1)表示。但是,如果在**的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表**中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?以为在进行上述操作的时候**中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢?

这意味着,你只是查找特定位置的元素或只在**的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是其他操作,你最好选择其他的**操作类。比如,LinkList**类在增加或移除**中任何位置的元素所花费的时间都是一样的?O(1),但它在索引一个元素的使用缺比较慢-O(i),其中i是索引的位置.使用ArrayList也很容易,因为你可以简单的使用索引来代替创建iterator对象的操作。LinkList也会为每个插入的元素创建对象,所有你要明白它也会带来额外的开销。

最后,在《Practical Java》一书中Peter Haggar建议使用一个简单的数组(Array)来代替Vector或ArrayList。尤其是对于执行效率要求高的程序更应如此。因为使用数组(Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作。

java里collection是接口,按理它只能有抽象方法

collection是接口,接口里只有抽象方法...没有具体方法...所有接口都一样..

collection接口里的方法是通过他的子类来实现的..它有set,list和map(虽然map不是它的子类)子类.collection只是作为一个向上抽离的父类来统计这些子类共同实现的抽象方法..

Collection cl = new ArrayList();通过父类的引用指向子类的对象原则,通过自定义名cl来点出来的方法是调用子类里的具体方法来实现的.并不是父类的具体方法(父类没有具体方法,只有抽象方法,因为它是接口)..这也就是多态的好处之一,可以通过父类的接口来使用出子类实现的方法.

以下哪些方法是collection 接口的方法

Collection的常用操作boolean add(E e)确保此 collection 包含指定的元素(可选操作)。boolean addAll(Collection? extends E c)将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。void clear()移除此 collection 中的所有元素(可选操作)。boolean contains(Object o)如果此 collection 包含指定的元素,则返回 true。boolean containsAll(Collection? c)如果此 collection 包含指定 collection 中的所有元素,则返回 true。boolean equals(Object o)比较此 collection 与指定对象是否相等。int hashCode()返回此 collection 的哈希码值。boolean isEmpty()如果此 collection 不包含元素,则返回 true。IteratorE iterator()返回在此 collection 的元素上进行迭代的迭代器。boolean remove(Object o)从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。boolean removeAll(Collection? c)移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。boolean retainAll(Collection? c)仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。int size()返回此 collection 中的元素数。Object[] toArray()返回包含此 collection 中所有元素的数组。T T[]toArray(T[] a)返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。故答案:C

java中collection是什么?怎么理解?怎么使用?

collection是个接口(常用作**用),它下面有两个子接口分别为

(1)List(2)set

其中List是有序可重复集,set是无序不可重复集。

List又分为三类(1)ArrayList(2)LinkList(3)Vector

ArrayList内部由数组实现,适合查询;

LinkList内部由链表实现,适合增删改。

Vector几乎用不到

set又分为(1)HashSet(2)treeSet

treeSet是二叉树,有序的

HashSet采用散列存储,是无序的。

另外collection是**的接口

collections是**的工具类

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。