S2:java集合框架
Java集合就是一个容器。面向对象语言对事物的体现都是以对象的形式存在,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。如果往集合里存放基本数据类型,在存取过程中会有个自动装箱和拆箱。
因为容器中数据结构不同,容器有很多种。不断地将共性功能向上抽取,形成了集合体系,称之为集合框架。
集合框架的顶层就称之为Collection接口。所有的集合类都位于java.util包下,查阅API可以得到如下体系结构。在使用一个体系时,原则:参阅顶层内容。建立底层对象。
集合和数组的区别:
1:数组是固定长度的;集合可变长度的。
2:数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。
3:数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。
2. LIST 接口
ArrayList 集合类
返回类型 |
方法 |
说明 |
boolean |
add(Object o) |
在列表的末尾顺序添加元素,起始索引位置从 0 开始 |
void |
add(int index,Object o) |
在指定的索引位置元素注意:索引位置必须介于 0和列表中元素个数之间 |
int |
size() |
返回列表中的元素个数 |
Object |
get(int index) |
返回指定索引位置处的元素注意:取出的元素是 Object类型,使用前需要进行强制类型转换 |
boolean |
contains(Object o |
判断列表中是否存在指定元素 |
boolean |
remove(Object o) |
从列表中删除元素 |
Object |
remove(int index) |
从列表中删除指定位置元素,起始索引位置从 0 开始 |
对比:
- Vector 是线程安全的,ArrayList 重速度轻安全,是线程非安全的,所以当运行到多线程序环境中时候,需要程序员自己管理线程的同步问题。
- 当长度需要增长时,Vector 默认增长为原来的一倍,而 ArrayList 只增长 50%,有利于节约内存空间。
LinkedList 集合类
返回类型 |
方法 |
说明 |
void |
addFirst(Object o) |
在列表的首部添加元素 |
void |
addLast(Object o) |
在列表的末尾添加元素 |
Object |
getFirst() |
返回列表中的第一个元素 |
Object |
getLast() |
返回列表中的最后一个元素 |
Object |
removeFirst() |
删除并返回列表中的第一个元素 |
Object |
removeLast() |
删除并返回列表中的最后一个元素 |
3. MAP 接口
返回类型 |
方法 |
说明 |
Object |
put(Object key,Object value) |
以“键-值对”的方式进行存储注意:键必须是唯一的,值可以重复。如果试图添加重复的键,那么最后加入的键-值对将替换原先的键-值对。 |
Object |
get(Object key) |
根据健返回相关联的值,如果不存在指定的键,返回 null。 |
Object |
remove(Object key) |
删除由指定的键映射的“键-值对” |
int |
size() |
返回元素个数 |
Set |
keySet() |
返回键的集合 |
Collection |
values() |
返回值的集合 |
boolean |
containsKey(Object key) |
如果存在由指定的键映射的“键-值对”,返回true |
Hashtable 和 HashMap 的异同。
HashMap 类出现之前,JDK 中存在一个和它同样采用哈希表存储方式,同样实现键值映射的集合类 Hashtable。两者实现原理相同,功能相同,很多情况下可以互用。
- Hashtable 继承自 Dictionary 类,而 HashMap 实现了 Map 接口。
- Hashtable 是线程安全的,HashMap 重速度轻安全,是线程非安全的,所以当运行到多线程环境中时,需要程序员自己管理线程的同步问题。
- Hashtable不允许null值(key和value都不允许),HashMap允许null值(key和 value 都允许)。
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Map.Entry;
- import java.util.Set;
- public class MAP {
- public static void main(String[] args) {
- //遍历方式1:
- Map<String,String>c=new HashMap<String,String>();
- c.put("CN", "中国");
- c.put("RU", "俄罗斯");
- c.put("FR", "法兰西");
- Set<String> set=c.keySet();
- for (String key : set) {
- System.out.println(key);
- System.out.println(c.get(key));
- }
- //遍历方式2:
- System.out.println("=====================================");
- Collection<String> c1=c.values();
- for (String values : c1) {
- System.out.println(values);
- }
- //遍历方式3:
- System.out.println("=======================================");
- Set<Entry<String, String>> c2=c.entrySet();
- for (Entry<String, String> entry : c2) {
- System.out.println(entry.getKey());
- System.out.println(entry.getValue());
- }
- //遍历方式4:
- System.out.println("=============================");
- Set<String>keyset=c.keySet();
- Iterator<String> iterator=keyset.iterator();
- while(iterator.hasNext()){
- String key=iterator.next();
- System.out.println(key);
- System.out.println(c.get(key));
- }
- //遍历方式5:
- System.out.println("===============================");
- Iterator<Entry<String, String>> c3=c.entrySet().iterator();
- while (c3.hasNext()) {
- Entry<String, String> en=c3.next();
- System.out.println(en.getKey());
- System.out.println(en.getValue());
- }
- }
- }
4. 迭代器 I TERATOR
- boolean hasNext():判断是否存在另一个可访问的元素。
- Object next(),返回要访问的下一个元素。
5 泛型集合
数组和集合的主要区别包括以下几个方面。
- 数组可以存储基本数据类型和对象,而集合中只能存储对象(可以以包装类形式存储基本数据类型)。
- 数组长度固定,集合长度可以动态改变。
- 定义数组时必须指定数组元素类型,集合默认其中所有元素都是 Object。
- 无法直接获取数组实际存储的元素个数,length 用来获取数组的长度,但可以通过size()直接获取集合实际存储的元素个数。
- 集合有多种实现方式和不同的适用场合,而不像数组仅采用分配连续空间方式。
- 集合以接口和类的形式存在,具有封装、继承和多态等类的特性,通过简单的方法和属性调用即可实现各种复杂操作,大大提高软件的开发效率。
总结
①集合弥补了数组的缺陷,它比数组更灵活更实用,可大大提高了软件的开发效率,而且不同的集合可适用于不同场合。
- Collection 接口存储一组不唯一、无序的对象。
- Set 接口继承 Collection 接口,存储一组唯一、无序的对象。
- List 接口继承 Collection 接口,存储一组不唯一、有序的对象。
- Map 接口存储一组成对的键一值对象,提供 Key 到 value 的映射。key 不要求有序、 不允许重复。value 同样不要求有序,但允许重复。
④ArrayList 和数组采用相同的存储方式,它的优点在于遍历元素和随机访问元素的效率比较高。LinkedList 采用链表存储方式,优点在于插入、删除元素时效率比较高。
S2:java集合框架的更多相关文章
- (转)Java集合框架:HashMap
来源:朱小厮 链接:http://blog.csdn.net/u013256816/article/details/50912762 Java集合框架概述 Java集合框架无论是在工作.学习.面试中都 ...
- Java集合框架:HashMap
转载: Java集合框架:HashMap Java集合框架概述 Java集合框架无论是在工作.学习.面试中都会经常涉及到,相信各位也并不陌生,其强大也不用多说,博主最近翻阅java集合框架的源码以 ...
- 【Java集合框架】规则集--Set
集合: Java主要支持三种: 1.规则集(Set) 用于存储一组不重复的元素 2.线性表(List) 用于存储一个由元素构成的有序集合 3.队列(Queue) 同与数据结构中的队列,存储用先进先出的 ...
- java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类
本文关键词: java集合框架 框架设计理念 容器 继承层级结构 继承图 集合框架中的抽象类 主要的实现类 实现类特性 集合框架分类 集合框架并发包 并发实现类 什么是容器? 由一个或多个确 ...
- 第49节:Java集合框架中底层文档的List与Set
Java集合框架中的List与Set // 简书作者:达叔小生 Collection -> Set 无序不重复 -> 无序HashSet,需要排序TreeSet -> List 有序 ...
- Java集合框架中底层文档的List与Set
Java集合框架中的List与Set // 简书作者:达叔小生 Collection -> Set 无序不重复 -> 无序HashSet,需要排序TreeSet -> List 有序 ...
- (Set, Map, Collections工具类)JAVA集合框架二
Java集合框架部分细节总结二 Set 实现类:HashSet,TreeSet HashSet 基于HashCode计算元素存放位置,当计算得出哈希码相同时,会调用equals判断是否相同,相同则拒绝 ...
- (Collection, List, 泛型)JAVA集合框架一
Java集合框架部分细节总结一 Collection List 有序,有下标,元素可重复 Set 无序,无下标,元素不可重复 以上为Collection接口 以ArrayList为实现类实现遍历:增强 ...
- Java集合框架List,Map,Set等全面介绍
Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +- ...
随机推荐
- Java虚拟机详解(二)------运行时内存结构
首先通过一张图了解 Java程序的执行流程: 我们编写好的Java源代码程序,通过Java编译器javac编译成Java虚拟机识别的class文件(字节码文件),然后由 JVM 中的类加载器加载编译生 ...
- centos crontab用法详解 定时任务的设置
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,类似于windows的计划任务 安装: yum -y install vixie-cron yum -y install crontab ...
- Centos7下安装Mysql8.0
突然发现mysql都有8.0了,且性能提升比较明显,就自己装来玩玩. centos的yum源中默认是没有mysql的,所以我们需要先去官网下载mysql的repo源并安装: 官网:http://dev ...
- 微服务-springboot-rabbitmq:实现延时队列
延时队列应用于什么场景 延时队列顾名思义,即放置在该队列里面的消息是不需要立即消费的,而是等待一段时间之后取出消费.那么,为什么需要延迟消费呢?我们来看以下的场景 网上商城下订单后30分钟后没有完成支 ...
- C# 6 新语法
1. using 声明的静态用法 2. 表达式体方法 3. 表达式体属性 4. 自动实现的属性初始化器 5. 只读的自动属性 6. nameof 运算符 7. 空值传播运算符 8. 字符串插值 9. ...
- Java中的关键字synchronized
1. 介绍 在Java并发系列的文章中,这个是第二篇文章.在前面的一篇文章中,我们学习了Java中的Executor池和Excutors的各种类别. 在这篇文章中,我们会学习synchronized关 ...
- IDEA安装Scala
Scala的安装 使用scala必须有jdk windows下开发工具的安装(我这里使用的是IDEA) 打开IDE 进入这个页面,如果没有进入这个界面,而直接进入项目的话 请点击https://blo ...
- Oracle数据库---包
--根据员工号或员工姓名获取员工的信息--根据员工号或员工姓名删除员工的信息--创建包规范CREATE OR REPLACE PACKAGE overload_pkgIS FUNCTION get_i ...
- 使用Mysql执行SQL语句基础操作
SQL: 又叫结构化语言,是一种用来操作RDBMS的数据库语言,在关系型数据库中都支持使用SQL语句,如oracle.mysql等等. 注意: 在关系型数据库中sql语句是通用的,而在非关系型数据库 ...
- P2344 奶牛抗议 离散化+前缀和+动态规划+树状数组
[题目背景] Generic Cow Protests, 2011 Feb [题目描述] 约翰家的N 头奶牛正在排队游行抗议.一些奶牛情绪激动,约翰测算下来,排在第i 位的奶牛的理智度为Ai,数字可正 ...