当前位置: 首页 > news >正文

Java集合源码学习(1)接口

最近看到《Java核心技术 卷Ⅰ》集合的部分,知道这是很重要的一部分内容,特地学习一下集合的源码。本来是想在CSDN上面写的,但是CSDN社区的环境太乱了,恰好在掘金上看到了“大大纸飞机”同学写的集合相关的文章很不错。所以转战掘金。

Java集合框架包含了很多的数据结构,主要包括 List列表、Set集合、Map映射、迭代器(Iterator、Enumeration)、工具类(Arrays、Collections)几个部分。

集合框架的接口

画图使用了:processon.com

其中有两个最基本的接口:Collection和Map。 而List、Set和Queue接口又继承了Collection接口。SortedMap接口继承了Map接口。

(1)Collection接口
public interface Collection<E> extends Iterable<E>
Collection接口包含了我们平时使用的一些方法:

int size();
boolean isEmpty();
boolean contains(Object o);
Iterator<E> iterator();
Object[] toArray();
<T> T[] toArray(T[] a);
boolean add(E e);
boolean remove(Object o);
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? extends E> c);
boolean removeAll(Collection<?> c);
复制代码

(2)List接口
List是一个继承自Collection的接口,List是集合中的一种。List是有序的队列,List中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允许有重复的元素。
(3)Set接口
Set接口也是集合中的一种。Set的add方法不允许增加重复的元素。可以适当的定义equals方法:只要两个集包含同样的元素就认为是相等的,而不要求这些元素有同样的顺序。hashCode方法的定义要保证包含相同元素的两个集会得到相同的散列码。
SortedSet会提供用于排序的比较器对象。

public interface Set<E> extends Collection<E>{
    int size();
    boolean isEmpty();
    boolean contains(Object o);
    Iterator<E> iterator();//迭代器对象
        @Override
    default Spliterator<E> spliterator() {
        return Spliterators.spliterator(this, Spliterator.DISTINCT);//并行遍历的迭代器
    }
}
复制代码

(4)Queue接口
Queue接口也继承自Collection接口,实现了队列的数据结构:

boolean add(E e);//增加一个元索
boolean offer(E e);//添加一个元素并返回true,如果队列已满,则返回false
E remove();//移除并返回队列头部的元,如果队列为空,则抛出一个NoSuchElementException异常
E poll();//移除并返问队列头部的元素,如果队列为空,则返回null
E element();//返回队列头部的元素,如果队列为空,则抛出一个NoSuchElementException异常
E peek();//返回队列头部的元素,如果队列为空,则返回null  
复制代码

(5)Iterator接口
Iterator集合的迭代器。集合可以通过Iterator去遍历集合中的元素。Iterator提供的API接口,包括:是否存在下一个元素、获取下一个元素、删除当前元素。

boolean hasNext();
E next();

default void remove() {
    throw new UnsupportedOperationException("remove");
}

default void forEachRemaining(Consumer<? super E> action) {
    Objects.requireNonNull(action);
    while (hasNext())
        action.accept(next());
}  
复制代码

(6)Map接口
提供了映射需要的基本方法:

int size();
boolean isEmpty();
boolean containsKey(Object key);
boolean containsValue(Object value);
V get(Object key);
V put(K key, V value);
V remove(Object key);
void putAll(Map<? extends K, ? extends V> m);
void clear();
Set<K> keySet();
Collection<V> values();
Set<Map.Entry<K, V>> entrySet();
复制代码

(7)SortedMap接口
SortedMap与SortedSet接口会提供用于排序的比较器对象。

public interface SortedMap<K,V> extends Map<K,V>{
    Comparator<? super K> comparator();
    SortedMap<K,V> subMap(K fromKey, K toKey);
    SortedMap<K,V> headMap(K toKey);
    SortedMap<K,V> tailMap(K fromKey);
    K firstKey();
    K lastKey();
    Set<K> keySet();
    Collection<V> values();
    Set<Map.Entry<K, V>> entrySet();
}  
复制代码

(8)Iterator接口

public interface Iterator<E> {
    boolean hasNext();
    E next();
    default void remove() {
        throw new UnsupportedOperationException("remove");
    }
    //主要将每个元素作为参数发给action来执行特定操作
    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}
复制代码

相关文章:

  • 微信小程序【树形视图】demo
  • 使用JTAG调试器和Freemaster 2.0 进行powerpc架构的mpc5XXX系列的调试
  • EM算法随记
  • Vue 字段验证 八
  • 批量ping 检测linux主机是否可以通
  • find详细参数
  • PostgreSQL 10.1 手册_部分 III. 服务器管理_第 18 章 服务器设置和操作_18.9. 用 SSL 进行安全的 TCP/IP 连接...
  • PostgreSQL 10.1 手册_部分 III. 服务器管理_第 23 章 本地化_23.2. 排序规则支持
  • 最近关于虚拟机的学习
  • Linux的systemd特性及gawk使用
  • 新东方雅思词汇---7.3、dioxide
  • 阿里云最新一代GPU云主机GN6(V100机型)正式售卖
  • 还原一个 Windows 10 Metro 布局
  • 记一次内存爆涨分析 , JVM命令使用
  • spring异常
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • Hexo+码云+git快速搭建免费的静态Blog
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Java读取Properties文件的六种方法
  • JS+CSS实现数字滚动
  • Js基础知识(四) - js运行原理与机制
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • node和express搭建代理服务器(源码)
  • PV统计优化设计
  • session共享问题解决方案
  • vue学习系列(二)vue-cli
  • 从零开始的无人驾驶 1
  • 构建二叉树进行数值数组的去重及优化
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 使用 QuickBI 搭建酷炫可视化分析
  • 通过几道题目学习二叉搜索树
  • 由插件封装引出的一丢丢思考
  • 说说我为什么看好Spring Cloud Alibaba
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (三十五)大数据实战——Superset可视化平台搭建
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (算法二)滑动窗口
  • (万字长文)Spring的核心知识尽揽其中
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)Mysql的优化设置
  • (转载)利用webkit抓取动态网页和链接
  • (转载)深入super,看Python如何解决钻石继承难题
  • .htaccess 强制https 单独排除某个目录
  • .net Application的目录
  • .NET 的程序集加载上下文
  • .net 验证控件和javaScript的冲突问题
  • .net专家(高海东的专栏)
  • :如何用SQL脚本保存存储过程返回的结果集
  • @Bean, @Component, @Configuration简析
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • []我的函数库
  • [20170705]lsnrctl status LISTENER_SCAN1