List和Set都是接口,它们继承与Collection。List是有序的队列,可以用重复的元素;而Set是数学概念中的集合,不能有重复的元素。List和Set都有它们各自的实现类。

  为了方便,我们抽象出AbstractCollection类来让其他类继承,该类实现类Collection中的绝大部分方法。AbstractListAbstractSet继承AbstractCollection,具体的List实现类继承与AbstractList,而Set的实现类则继承与AbstractSet

  另外,Collection中有个iterator()方法,它的作用是返回一个Iterator接口。通常,我们通过Iterator迭代器来遍历集合。ListIteratorList接口所特有的,在List接口中,通过ListIterator()返回一个ListIterator对象

Collection接口

  public interface Collection<E> extends Iterable<E> {} 它是一个高度抽象出来的集合,包含了集合的基本操作:添加、删除、清空、遍历、是否为空、获取大小等。

普通方法:

  int size():返回此集合中的元素数量
  boolean isEmpty():判断集合元素是否为空
  boolean contains(Object o):判断此集合是否包含指定的元素,包含则返回true,反之
  Iterator<E> iterator():返回此集合中元素的迭代器,不保证元素返回的顺序(除非此集合是提供保证的某个类的实例)。
  Object[] toArray():将此集合中的元素转换成数组并返回该数组,该方法作为基于数组和集合之间的桥梁的api
  <T> T[] toArray(T[] a):返回指定类型数组
  boolean add(E e):此集合添加指定元素
  boolean remove(Object o):删除指定元素
  boolean containsAll(Collection<?> c):判断是否包含特定集合,如果存在则返回true 反之
  boolean addAll(Collection<? extends E> c):添加指定集合
  boolean removeAll(Collection<?> c):删除指定集合
  boolean retainAll(Collection<?> c):仅保留指定类型的集合
  void clear():清空集合元素
  boolean equals(Object o):将指定的对象与此集合进行相等性较
  int hashCode():返回集合的哈希值,用于比较相等与否

默认方法:
  default boolean removeIf(Predicate<? super E> filter):移除此集合中满足给定条件的所有元素
  default Spliterator<E> spliterator( return Spliterators.spliterator(this, 0)):
  default Stream<E> stream() { return StreamSupport.stream(spliterator(), false);}返回一个输入流
  default Stream<E> parallelStream() { return StreamSupport.stream(spliterator(), true);}返回一个并行输入流

List接口

  public interface List<E> extends Collection<E> {}

  从List定义中可以看出,它继承与Collection接口,即List是集合的一种。List是有序的队列,List中的每一个元素都有一个索引,第一个元素的索引值为0,往后的元素的索引值依次+1.,List中允许有重复的元素。

  List继承Collection自然包含了Collection的所有接口,由于List是有序队列,所以它也有自己额外的API接口。API如下:

  普通方法:

    add(int index,E element):在列表指定位置插入指定元素
    addAll(int index,Collection<? extends E> c):在指定位置添加集合元素
    get(int index):获取指定位置的元素
    indexOf(Object o):获取元素的第一个位置
    isEmpty():判断列表中是否有元素
    lastIndexOf(Object o):获取指定元素的最后一个位置
    listIterator():获取列表元素的列表迭代器
    listIterator(int index):从指定位置开始获取列表迭代器
    remove(int index):移除指定位置的元素
    set(int index,E element):用指定元素替换指定位置的元素
    subList(int fromIdex,int toIndex):获取fromIndex到toIndex的元素列表
  默认方法

//将集合中的元素全部替换为函数值
default void replaceAll(UnaryOperator<E> operator) {
Objects.requireNonNull(operator);
final ListIterator<E> li = this.listIterator();
while (li.hasNext()) {
li.set(operator.apply(li.next()));
}
}
//将集合中的内容重新排序
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c);
ListIterator<E> i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}
default Spliterator<E> spliterator() {
return Spliterators.spliterator(this, Spliterator.ORDERED);
}

Set接口

  public interface Set<E> extends Collection<E> {}

  Set也继承与Collection接口,且里面不能有重复元素。关于API,Set与Collection的API基本一样,不在赘述。

java源码 --List、Set、Collection的更多相关文章

  1. Programming a Spider in Java 源码帖

    Programming a Spider in Java 源码帖 Listing 1: Finding the bad links (CheckLinks.java) import java.awt. ...

  2. 【java集合框架源码剖析系列】java源码剖析之TreeSet

    本博客将从源码的角度带领大家学习TreeSet相关的知识. 一TreeSet类的定义: public class TreeSet<E> extends AbstractSet<E&g ...

  3. 【java集合框架源码剖析系列】java源码剖析之HashSet

    注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本.本博客将从源码角度带领大家学习关于HashSet的知识. 一HashSet的定义: public class HashSet&l ...

  4. 如何阅读Java源码 阅读java的真实体会

    刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心.   说到技术基础,我打个比 ...

  5. Android反编译(一)之反编译JAVA源码

    Android反编译(一) 之反编译JAVA源码 [目录] 1.工具 2.反编译步骤 3.实例 4.装X技巧 1.工具 1).dex反编译JAR工具  dex2jar   http://code.go ...

  6. 如何阅读Java源码

    刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动.源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧, ...

  7. Java 源码学习线路————_先JDK工具包集合_再core包,也就是String、StringBuffer等_Java IO类库

    http://www.iteye.com/topic/1113732 原则网址 Java源码初接触 如果你进行过一年左右的开发,喜欢用eclipse的debug功能.好了,你现在就有阅读源码的技术基础 ...

  8. 解密随机数生成器(二)——从java源码看线性同余算法

    Random Java中的Random类生成的是伪随机数,使用的是48-bit的种子,然后调用一个linear congruential formula线性同余方程(Donald Knuth的编程艺术 ...

  9. Java--Eclipse关联Java源码

    打开Eclipse,Window->Preferences->Java 点Edit按钮后弹出: 点Source Attachment后弹出: 选择Java安装路径下的src.zip文件即可 ...

  10. 使用JDT.AST解析java源码

    在做java源码的静态代码审计时,最基础的就是对java文件进行解析,从而获取到此java文件的相关信息: 在java文件中所存在的东西很多,很复杂,难以用相关的正则表达式去一一匹配.但是,eclip ...

随机推荐

  1. P1850 换教室——期望DP

    题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n2n2n 节课程安排在 nnn 个时间段上.在第 iii(1≤i≤n1 \leq i ...

  2. SpringBoot JPA懒加载异常 - com.fasterxml.jackson.databind.JsonMappingException: could not initialize proxy

    问题与分析 某日忽然发现在用postman测试数据时报错如下: com.fasterxml.jackson.databind.JsonMappingException: could not initi ...

  3. [后渗透]Linux下的几种隐藏技术【转载】

    原作者:Bypass 原文链接:转自Bypass微信公众号 0x00 前言 攻击者在获取服务器权限后,会通过一些技巧来隐藏自己的踪迹和后门文件,本文介绍Linux下的几种隐藏技术. 0x01 隐藏文件 ...

  4. 详解css3 pointer-events(阻止hover、active、onclick等触发事件来

    pointer-events 更像是JavaScript,它能够: 阻止用户的点击动作产生任何效果 阻止缺省鼠标指针的显示 阻止CSS里的 hover 和 active 状态的变化触发事件 阻止Jav ...

  5. 微信小程序 wxParse插件显示视频

    修改wxParse/html2json.js 文件 ,在 html2json(html, bindName) 方法里 var node = { node: 'element', tag: tag, } ...

  6. 《Glibc内存管理》笔记DAY5

    目录 分箱式内存管理 Unsorted bin Fast bins 核心结构体分析 malloc_state 内容来源 分箱式内存管理 Unsorted bin   Unsorted bin 可以看作 ...

  7. mkfs格式化分区(为分区写入文件系统)

    mkfs 命令非常简单易用,不过是不能调整分区的默认参数的(比如块大小是 4096 Bytes),这些默认参数除非特殊清况,否则不需要调整.如果想要调整,就需要使用 mke2fs 命令重新格式化.命令 ...

  8. GitHub OAuth 第三方登录示例教程

    这组 OAuth 系列教程,第一篇介绍了基本概念,第二篇介绍了获取令牌的四种方式,今天演示一个实例,如何通过 OAuth 获取 API 数据. 很多网站登录时,允许使用第三方网站的身份,这称为&quo ...

  9. Linux 一条命令杀死占用端口的所有进程

    Linux 一条命令杀死占用端口的所有进程 2018年05月28日 19:43:05 gq97 阅读数 7655更多 分类专栏: Linux   版权声明:本文为博主原创文章,遵循CC 4.0 BY- ...

  10. pytorch基础学习(二)

    在神经网络训练时,还涉及到一些tricks,如网络权重的初始化方法,优化器种类(权重更新),图片预处理等,继续填坑. 1. 神经网络初始化(Network Initialization ) 1.1 初 ...