Java——容器和泛型
集合类:List Set Queue Map (容器类):解决数组长度固定的问题
列表List:关心的是索引(有序)
- 特点
- 对象按照索引存储
- 可以存储重复元素
- 具有与索引相关的一套方法
- 主要实现类
- ArrayList:动态数组
- 快速迭代,少量插入元素
- LinkedList:链表
- 迭代速度慢,快速插入删除
- ArrayList
- 动态数组,动态的增加和减少元素,可以灵活的设置数组的大小
- 构造
- ArrayList():构造一个初始容量为10的空链表
- ArrayList(int init):构造一个具有初始容量的空列表
- List<E> list = new ArrayList<E>();(常用向上转型,E为包装器类)
- ArrayList<E> list = new ArrayList<E>();
- 方法:
- add(E e):将指定的元素添加到此列表的尾部
- add(int index,E element):添加到指定位置
- remove(int index):移除此列表中指定位置上的元素
- get(int index):返回指定位置上的元素
- set(int index,E element):替代指定位置上的元素
- size():返回此列表中的元素个数
- LinkedList
- 双向链表
- 构造方法:
- LinkedList()
- LinkedList(Collection<? extends E> c):构造一个包含指定 collection 中的元素的列表
- 方法:(同ArrayList)
Set 集:关心唯一性
- 特点:无序,不重复
- 主要实现类
- HashSet:使用被插入对象的Hash码
- LinkedHashSet:有序的HashSet
- TreeSet:二叉树结构,保证元素按照自然顺序进行升序排序
- HashSet
- 基于HashMap实现的,HashSet底层采用HashMap来保存所有元素
- 不允许重复
- 无序
- 方法
- add(E,e);
- clear();移除所有元素
- remove(Object o),若存在,则移除
- size():返回set中元素的数量(set的容量)
- isEmpty():判断是否为空
- TreeSet(树集)
- 数据插入后会自动排序
- 操作较慢(迭代器总是以排好序的顺序访问每个元素)
- 方法
- add(E e)
- remove(Object o)
- first():返回第一个元素(最低)
- last():返回最后一个元素(最高)
- isEmpty()
- size()
- LinkedHashSet
- 在HashSet的实现上添加了Linked的支持,在每个结点上通过一个链表串联起来,有确定的顺序。适用于有常量复杂度的高效性存取性能要求,同时又要求排序的情况
- 继承于HashSet,又基于LinkedHashMap来实现
- 方法:继承HashSet
- 三个类的比较
- HashSet
- 不能保证元素的排列顺序,顺序有可能发生变化(无序)
- 不同步,集合元素可以是null,但是只可以有一个null
- 哈希表是通过使用成为散列法的机制来存储信息,元素并没有以某种特定顺序来存放
- LinkedHashList
- 有序(元素的插入顺序),允许以插入的顺序在集合中迭代
- 遍历性能比HashSet好,插入时性能较差
- TreeSet
- 提供一个使用树结构存储Set接口实现,对象以升序顺序存储,访问和遍历的时间快
Queue
- 特殊的线性表,front删除,rear插入
- 继承了collection接口
- LikedList实现了Queue接口
- 方法
- add(E e):若队列已满,则抛出异常
- remove():移除并返回队头元素,失败时抛出异常
- element():返回队头元素
- offer(E e):添加一个元素并返回true,若队列已满,则返回null
- poll():移除并返回队头的元素,若队列为空,返回null
- peek():返回队头元素,若队列为空,则返回null
- put(E e):添加一个元素,若已满,则阻塞
- take():移除并返回队头元素
Map
- 映射(Map)
- 对象以键值对存储(key—value)
- key不允许有重复,value允许有重复
- Map中元素,可以将key序列,value序列单独抽取出来
- 使用**keySet()**抽取key序列,将map中所有的keys生成一个Set
- 使用**values()**抽取value序列,将map中所有的values生成一个Collection
- HashMap
- 基于哈希表的Map接口实现
- 非线程安全
- 使用方法
- Object put(K key,V value)
- Object get(Object K)
- containsKey(Object k)
- containsValue(Object v)
- 遍历HashMap(增强for循环)
- TreeMap
- 基于红黑树的实现
- 按照元素的自然顺序排序
- LinkedHashMap
- HashMap的ordered版本(有序)
迭代器(Interator)
- 轻量级对象
- 被Collection继承
- 功能:用于对容器的遍历
- 方法
- hasNext():判断是否有可以迭代的元素
- next():返回当前元素,并返回下一个元素
- remove():从迭代器指向的集合中移除迭代器返回的最后一个元素
泛型
- 增强代码的通用性,避免强制类型转换
- 只接受引用数据类型作为类型参数
- 语法
- class 名称 <泛型列表>
- class ArrayList
Java——容器和泛型相关推荐
- Java——容器(泛型)
[泛型] 起因:JDK1.4之前类型不明确 <1>装入集合的类型都被当做Object对待,从而失去自己的实际类型. <2>从集合中取出时往往需要转型,效率低,且很容易出错 ...
- 2015第22周六Java反射、泛型、容器简介
Java的反射非常强大,传递class, 可以动态的生成该类.取得这个类的所有信息,包括里面的属性.方法以及构造函数等,甚至可以取得其父类或父接口里面的内容. obj.getClass().getDe ...
- 菜鸟学习笔记:Java提升篇3(容器3——泛型、排序)
菜鸟学习笔记:Java容器3--泛型.排序 泛型 泛型类 泛型接口 泛型方法 泛型继承 通配符"?" 泛型知识点补充 容器排序 Comparable接口与compareTo方法 C ...
- Java语言基础(三)——异常、容器、泛型
目录 一.异常 1.1.简单异常 1.1.1.检查型异常 1.1.2.运行时异常 1.1.3.错误Error 1.2.异常处理机制 1.3.自定义异常 1.4.实际应用中的经验总结 二.容器 2.1. ...
- Java中的泛型 --- Java 编程思想
前言 我一直都认为泛型是程序语言设计中一个非常基础,重要的概念,Java 中的泛型到底是怎么样的,为什么会有泛型,泛型怎么发展出来的.通透理解泛型是学好基础里面中非常重要的.于是,我对<Ja ...
- java object转泛型_为什么Java的泛型要用擦除实现
在 Java 中的 泛型 ,常常被称之为 伪泛型 ,究其原因是因为在实际代码的运行中,将实际类型参数的信息擦除掉了 (Type Erasure) .那是什么原因导致了 Java 做出这种妥协的呢?下面 ...
- 【Java心得总结六】Java容器中——Collection
在[Java心得总结五]Java容器上--容器初探这篇博文中,我对Java容器类库从一个整体的偏向于宏观的角度初步认识了Java容器类库.而在这篇博文中,我想着重对容器类库中的Collection容器 ...
- java定义list_我的Java Web之路59 - Java中的泛型
本系列文章旨在记录和总结自己在Java Web开发之路上的知识点.经验.问题和思考,希望能帮助更多(Java)码农和想成为(Java)码农的人. 目录 介绍 再谈Java中的类型 为什么需要泛型? J ...
- [转载] 详解Java中的泛型
参考链接: Java中具有泛型的有界类型 1.什么是泛型 泛型,即"参数化类型".一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参.那么参数化类型怎么理解呢?顾名 ...
- 深入理解Java 容器
Java 容器 Java 容器 一.概览 Collection Map 二.容器中的设计模式 迭代器模式 适配器模式 三.源码分析 ArrayList Vector CopyOnWriteArrayL ...
最新文章
- nGrinder详细介绍及性能工具对比
- matplotlib包画基本的图
- python多维数据post给php_使用Python中的POST将数据发送到PHP
- java.util.logging.Logger基础教程
- struct and union
- 汽车电子专业知识篇(三)-自动驾驶中的多传感器融合
- 小猫的java基础知识点汇总(下)
- 拦截游戏窗口被移动_「维维足球pro-教案」50个传控踢法练习之(一、二)追球游戏...
- raspberry pi_如何使用Raspberry Pi构建数字针Kong相机
- oracle consistent gets,Oracle buffer cache理解之七——统计信息!
- 设计模式的七大设计原则:其六:迪米特法则
- javascript学习笔记之入门
- 大量HW红队+蓝队文档下载-定期更新
- 高德地图热力图,高德自带热力图heatmap
- 华为交换机DHCP Server释放IP
- jersey 过滤_Jersey的Filter详解
- 《股市稳赚》书中的精髓:用简单的神奇公式进行股票投资,获得稳定而持久的收益。
- 瑞利分布(Rayleigh Distribution)回顾
- 82.【LibraryManger】
- pdf书籍规范页码编排
热门文章
- 袁玉玮:简介人工智能在基金界的应用现状 (二)卖方交易员被冲击
- (转)跳舞的大象:郭士纳在IBM的案例
- (转)嘉信理财推出全新智能投顾平台
- C#:SQLite大量插入的效率问题
- 用OpenStack构建南方电网广东公司能源云
- 【路径规划】基于matalb穷举法机器人栅格地图避障路径规划【含Matlab源码 1675期】
- 【路径规划】基于matlab粒子群优化蚁群算法最短路径规划【含Matlab源码 076期】
- 人工智能和机器学习的前五门课程
- 单元格排序_Excel中这8种简单实用的排序方法,很多人都还不会用!
- jsonp 获取图片文件流_【国际IT专场】Laravel Media Library多媒体文件的上传与管理...