Java集合学习(一)

什么是集合?Java官网API文档里这样定义和描述的:

public interface Collection<E>extends Iterable<E>

集合表示一组对象,每一个对象称为元素。集合可以是包含重复元素的,也可以是各个元素互不相同。它既可以是无序的也可以是有序。JDK并没有提供它的直接实现,而是提供了更具体的子接口比如Set,List等实现。Collection接口通常在需要最高抽象性的集合传递和操作时被提及。

Bag及MultiSet(无序且能包含重复元素)相关接口需要直接实现Collection接口。

所有通用Collection接口实现类(通常实现于Collection子接口)应当包含两个标准构造函数:一个是无入参构造函数,用来创建一个空集合;另一个是以相同类型集合为单入参,用来创建一个与入参包含相同元素的集合。第二种构造函数通常用来复制一个集合,即创建一个等价集合。

Collection接口也包含一些“有害的”方法,即方法对集合实施的修改为当前集合所不支持的操作,此时会抛出UnsupportedOperationException异常。例如可以在不可修改的集合上调用addALL方法,但当被添加的集合为空时会抛出异常。

一些集合实现对其包含元素有严格要求,比如有些实现禁止非空元素,有些对元素类型有严格要求。尝试添加不合法的元素会抛出unchecked异常,如常见的NullPointerException和ClassCastException。尝试查询不合法元素是否存在通常抛出异常或直接返回false。更一般的,插入不合格元素到集合中会抛出异常或者对于某些实现方法来说返回成功。

不同集合的同步策略取决于各个集合自身。在缺少强有力保证情况下,调用正在被另一个线程改变的集合中的方法可能导致未知的错误。方法调用通常包括直接调用、传递集合给其它方法实现间接调用、或者使用已存在的迭代器检查集合。

许多集合框架接口中的方法的定义依赖于equal方法。例如方法contains(Object o)的使用规范说到“当且仅当集合包含至少一个满足条件(o==null ? e==null : o.equals(e))的元素e时返回true”。但这段描述不能解释为当以非空入参o调用Collection.contains时一定会调用o.equals(e)。接口实现可以自由优化当equal调用可以避免调用时。比如可以首先比较两个元素的哈希码( Object.hashCode()可以保证不同的对象产生不一样的哈希码)。推广来说,只要作者认为适当的时候,集合框架接口的实现可以自由的利用底层object方法的优点。

Collection接口只是Java集合框架的一个成员之一(Java Collections FrameWork)。

最后是该接口的方法细节:

int size():返回集合元素个数;

boolean isEmpty():当集合不包含元素时返回true;

Iterator<E> iterator():返回指向集合元素的迭代器;

Object[] toArray():返回包含集合元素的数组;

boolean add(E e):确保集合包含指定的元素,集合在方法调用后真正改变时返回true,当集合已经包含该元素且不允许包含重复元素时返回false;

boolean remove(Object o):移除集合中的指定元素,当方法调用后元素被移除时返回true;

boolean containsAll(Collection<?> c):当集合包含指定集合c中的所有元素时返回true;

				
时间: 2024-08-13 19:57:24

Java集合学习(一)的相关文章

java集合学习一

1.Set存放的元素是无序的不可重复. 2.List存放的元素为有序可重复. 3.重写equals方法,一般最好重写hasCode方法,当对象作为key的时候及索引,会使用hasCode方法进行查找. 4.容器对象在调用remove,contains等方法时需要比较对象是否相等,这会涉及到对象类型的equals方法和 hashCode方法.对于自定义的类型,需要重写equals和hashCode方法以实现自定义的对象相等规则.相等的对象 应该具有相等的hashCode. 5.ArrayList底

深入Java集合学习系列:HashMap的实现原理

参考文献 引用文献:深入Java集合学习系列:HashMap的实现原理,大部分参考这篇博客,只对其中进行稍微修改 自己曾经写过的:Hashmap实现原理 1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现(Hashtable跟HashMap很像,唯一的区别是Hashtalbe中的方法是线程安全的,也就是同步的).此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变. 2. HashMap的数据结构: 在ja

深入Java集合学习系列:LinkedHashMap的实现原理

1. LinkedHashMap概述: LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变.   LinkedHashMap实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表.此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序.   注意,此实现不是同步的.如果多个线程同时访问链接的哈希映射,而其中至少一个线

转:深入Java集合学习系列:HashSet的实现原理

0.参考文献 深入Java集合学习系列:HashSet的实现原理 1.HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持.它不保证set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用null元素.HashSet中不允许有重复元素,这是因为HashSet是基于HashMap实现的,HashSet中的元素都存放在HashMap的key上面,而value中的值都是统一的一个private static final Object PRESENT

深入java集合学习1-集合框架浅析

前言 集合是一种数据结构,在编程中是非常重要的.好的程序就是好的数据结构+好的算法.java中为我们实现了曾经在大学学过的数据结构与算法中提到的一些数据结构.如顺序表,链表,栈和堆等.Java 集合框架API是用来表示和操作集合的统一框架,它包含接口,实现类以及一些编程辅助算法.具体位于java.util包下. java集合框架UML图 从上面的UML图中可以看出,集合框架可以简单的分为四部分 Collection接口以及实现类 Map接口及其实现类 Iterator接口及实现类 辅助工具类  

java集合学习之Collection(1)

java集合类主要由两个接口派生出来:Collection和Map,者两个类是java集合框架的根本接口,其余的集合都是这两个集合的子类,这篇博客主要讲Collection接口及其体系中包含的set,list,queue 等集合.下面依次就这些内容进行讲解. 一.Collection 1.Collection是set,list,queue接口的父接口,Collection中定义的方法对set,list,queue也是适用的.下面的代码示范了Collection的基本操作,从下面的代码中可以看到,

Java 集合学习--HashMap

一.HashMap 定义 HashMap 是一个基于散列表(哈希表)实现的键值对集合,每个元素都是key-value对,jdk1.8后,底层数据结构涉及到了数组.链表以及红黑树.目的进一步的优化HashMap的性能和效率.允许key和value为NULL,同样非线程安全. ①.继承AbstractMap抽象类,AbstractMap实现Map接口,实现部分方法的.同样在上面HashMap的结构中,HashMap同样实现了Map接口,这样做是否有什么深层次的用意呢?网上查阅资料发现,这种写法只是一

Java 集合学习--集合概述

一.集合框架 集合,通常也叫容器,java中有多种方式保存对象,集合是java保存对象(对象的引用)的方式之一,之前学习的数组是保存对象的最有效的方式,但是数组却存在一个缺陷,数组的大小是固定的,但是往往我们在写程序的时候,并不知道需要保存多少个对象,或者是否需要用更复杂的方式来存储对象.而java提供集合类来解决这个问题.java中集合大家族的成员实在是太丰富了,有常用的ArrayList.HashMap.HashSet,也有不常用的Stack.Queue,有线程安全的Vector.HashT

java集合学习之Collection(3)

这篇博客主要介绍List集合和Queue集合 一.List集合 List集合是一个有序的可重复的集合,集合中的每个元素都对应一个索引,我们可以通过索引来访问List集合中的数据(其实可以看成一个长度可变的数组). List作为Collection的子接口,支持Collection的所有操作,但因为List是有序的所以新增加了一些新的操作,主要是根据索引来插入,删除,替换元素的方法.List通过equals()方法判断对象是否相等.如下面的代码所示: package lkl; import jav