Java 高级-集合框架
类似 C++ 中的 STL 标准模板库,Java 也在 java.util 包中封装了一套常用数据结构及其算法,称为集合框架。所有的集合框架都包含如下内容:
- 接口:代表集合的抽象数据类型 ADT,如 Collection、List、Set、Map 等
- 实现(类):集合接口的具体实现,是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。
- 算法:实现集合接口的对象里的方法,可以执行一些有用的计算,例如:搜索和排序。这些算法具有多态性,相同方法在相似的接口上有着不同的实现。
除了集合,Java 的集合框架也定义了几个 Map 接口和类。Map 里存储的是键/值对。尽管 Map 不是集合,但是它们完全整合在集合中。
集合框架概述
Java 集合框架分为两大类:
- Map 键值对的集合,包括SortedMap
- Collection 元素的集合,包括Set(包括 SortedSet)、List、Queue
主要接口及常用的实现类
具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
Collection 接口
常用方法
查询方法
| 方法名 | 描述 |
|---|---|
| int size() | 返回集合中元素个数 |
| boolean isEmpty() | 如果集合中没有元素则返回 true |
| boolean contains(Object obj) | 判断对象是否在集合中 |
| boolean containsAll(Collection c) | 判断方法的接收者对象是否包含集合中的所有元素 |
修改方法
| 方法名 | 描述 |
|---|---|
| boolean add(Object obj) | 向集合中增加对象 |
| boolean addAll(Collection<?> c) | 将参数集合中的所有元素增加到接收者集合中 |
| boolean remove(Object obj) | 删除对象 |
| boolean removeAll(Collection c) | 将参数集合中的所有元素从接收者集合中删除 |
| boolean retainAll(Collection c) | 与 removeAll 方法相反,只保留参数集合中的所有元素 |
List 接口
有序列表,元素可重复。
实现类
- Vector
- ArrayList:存储方式类似数组,访问速度快
- LinkedList:存储方式类似链表,增删速度快
Set 接口
无序集合,元素不可重复。
实现类
- HashSet
- TreeSet 树集合
SortedSet 接口
特殊的有序 Set,元素升序排列,还增加了次序的相关操作。
Queue接口
FIFO 先进先出队列。
实现类
- LinkedList:同时实现了 List 接口,先进先出
- PriorityList:按元素值排序的队列
Map 接口
存储键值对。需要同时指定键和值的类型 Map<k, v>。
实现类
- HashMap
- TreeMap
SortedMap
特殊 Map,关键字升序排列。通常用于字典。
相关算法
大多算法用于 List,min 和max 可以用于所有集合对象。
排序算法 sort
使 List 中的元素按照某种次序关系升序排列。
- 将元素按照自然次序排列,或者集合实现了 Comparable 接口
- 附加 Comparator 对象做参数,规定比较规则,可实现反序或特殊规则
乱序算法 shuffle
可用于洗牌,每个次序出现的概率都是一样的。
反序 reverse
二分查找算法 binarySearch
Arrays 类
需要引入 java.util.Arrays。
常用方法:
| 方法 | 描述 |
|---|---|
| sort(type[] a) | 排序 |
| binarySearch() | 二分查找 |
| equals(type[] a, type[] b) | 数组比较 |
| fill(type[] a, type val) | 数组填充同一个值 |
| asList(T… a) | 将数组转为 ArrayList |
基于动态数组的类型
Vector (集合框架的遗留类,不建议使用,线程安全)和 ArrayList(异步,效率高,建议用) :
- 实现了 Collection 接口
- 不能存储基本数据类型,需要包在包装类中
- 可以存储同类型的对象
- 容量可以自动扩充
Java 提供了线程安全集合 java.util.concurrent 包,有序集、队列,任何集合类通过使用同步包装器可以变成线程安全的:
List<E> synchArrayList = Collections.synchronisedList(new ArrayList<E>());
遍历实现了 Collection 接口的集合
- 通过 Enumeration (旧接口,不推荐使用)或 Iterator 接口(新接口,推荐)遍历集合
- 通过增强的 for 循环遍历集合
- 通过聚集操作遍历集合,可以在筛选的同时过滤
Enumeration/Iterator
Java 中的许多方法(例如 elements())返回 Enumeration 类型的对象,而不是返回集合类对象。
Enumeration 接口不能用于 ArrayList 对象,Iterator 接口可用于 ArrayList 对象和 Vector 对象。
Iterator 接口遍历对象的同时,可以删除对象。常用方法有:
- hasNext():集合中是否还有下一个元素
- next():取集合的下一个元素
- remove():删除集合中最后调用 next() 返回的元素,注意不是从 Iterator 类中删除
示例:
import java.util.*;
class test {
public static void main(String[] args) {
String[] s = {"hello", "world", "haha"};
ArrayList al = new ArrayList<String> (java.util.Arrays.asList(s));
System.out.println("before: " + al);
Iterator it = al.iterator();
while(it.hasNext()) {
String tmp = (String)it.next();
System.out.println(tmp);
if (tmp.length() > 4) {
it.remove();
}
}
System.out.println("after: " + al);
}
}
输出:
before: [hello, world, haha]
hello
world
haha
after: [haha]
Map 接口
Map 中保存键值对,主要实现类是 HashMap。
常用的修改方法和查询方法有:
示例:
import java.io.*;
import java.util.*;
class test {
public static void main(String[] args) {
String[] arr = {"hello", "world"};
Map m = new HashMap();
System.out.println(m.isEmpty() ? "empty map" : "not empty map");
m.put("one", "this is a string");
m.put("two", arr);
System.out.println(m.containsKey("one"));
System.out.println(m);
Iterator iter = m.entrySet().iterator();
while(iter.hasNext()) {
Map.Entry entry = (Map.Entry)iter.next();
System.out.println("next : "+ entry.getKey() +" - "+entry.getValue());
}
}
}
输出:
empty map
true
{one=this is a string, two=[Ljava.lang.String;@659e0bfd}
next : one - this is a string
next : two - [Ljava.lang.String;@659e0bfd
Java 高级-集合框架的更多相关文章
- java的集合框架最全详解
java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...
- java.util 集合框架集合
java的集合框架为程序提供了一种处理对象组的标准方式.设计了一系列标准泛型接口: ⑴Collection ()接口,扩展了Iterable接口,位于集合层次结构的顶部,因此所有的集合都实现Colle ...
- Java基础——集合框架
Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...
- java的集合框架之一
java是一套很成熟的东西,很多商用的东西都喜欢用它,用的人多,稳定.不过一般也不怎么说起它,因为太常见了,私下里说,写java应用层得就像农民工,每一处都是搭积木,根据设计师的东西如何优雅地搭好积木 ...
- 浅谈Java的集合框架
浅谈Java的集合框架 一. 初识集合 重所周知,Java有四大集合框架群,Set.List.Queue和Map.四种集合的关注点不同,Set 关注事物的唯一性,List 关注事物的索引列表,Q ...
- java的集合框架set 和map的深入理解
Java的集合框架之Map的用法详解 Map有两种比较常用的实现:HashMap 和 TreeMap. HashMap: HashMap 也是无序的,也是按照哈希编码来排序的,允许使用null 值和n ...
- Java 之 集合框架(JCF)
1.集合框架 a.框架:为了实现某一目的或功能,而预先提供的一系列封装好的.具有继承或实现关系的类与集合 b.集合:①定义:Java中对一些数据结构和算法进行封装,即封装(集合也是一种对象) ②特点: ...
- 十五、Java基础---------集合框架体系以及List
在介绍集合之前先说一下数组,正如我们所知,数组是某一类型数据的集合,强调的是数据,而且必须单一:集合框架的不同之处在于存储的数据类型没有任何限制,既可以存储基本数据类型(会自动提升为相应的包装类)也可 ...
- Java的集合框架
01.为什么要使用集合框架? 解析:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象,那么可以使用Java集合框架. 如果启用集合的删除方法,那么集合中所有元素的索引会自动维护. 集合 ...
随机推荐
- SpringBoot_04springDataJPA
说明:底层使用Hibernate 一.springDataJPA和mybatisPlus的使用区别 第一步: 把mybatisPlus的依赖.配置删除 包括:实体类的注解.引导类的mapperScan ...
- 7.css3表格、列表、边框的样式设置--list/border
1.css表格: ①Border-collapse是否把表格边框合并为单一的边框.Separate默认值,collapse合并. ②Border-spacing分割单元格边框的距离. ③Caption ...
- Nginx中配置https中引用http的问题
Nginx中配置https中引用http的问题 遇到问题: 今天公司要在后台增加直播入口,使用腾讯云的实时音视频,要求是必须使用https,在配置完强制跳转https候,发现后台无法上传图片,在浏览器 ...
- 内置的configparser模块和hashlib模块
#configparser模块:配置解析模块 import configparser config = configparser.ConfigParser() #创建一个配置解析对象 config[& ...
- EffectiveC++01-03
导读 作者Scott Meyers在如何有效运用C++方面给出了55个具体的做法,大致分为两类: 一般性的设计策略,集中于"如何在不同的做法中选择一种完成任务" 选择inherit ...
- JavaScript变量和字面量
一.什么是变量? 首先了解一下什么是内存:内存就是保存程序在运行过程中,所需要用到的数据8bit(比特是表示信息的最小单位). 8bit=1byte 1024byte=1MB 1024MB=1GB 1 ...
- Python_015(面向对象(接口类,抽象类,多态,封装)
一.抽象类与接口类 1.抽象类:抽象即类似或者说比较像的部分,继承描述的是父类与子类的一种关系,要找出这种关系,必须先抽象再继承; a:抽象分成两个层次: 1)由对象->类:将两个有相似地方的对 ...
- <知识整理>2019清北学堂提高储备D4
今天主要讲一下数学的知识. 一.进制转换: 十进制到k进制:短除法:顺除至0,逆序取余. k进制转十进制:乘权相加. 常见进制:四进制(对应2位二进制).八进制(对应3位二进制).十六进制(对应4位二 ...
- BFC、IFC、GFC和FFC
基本概念 Box 是 CSS 布局的对象和基本单位, 直观点来说,就是一个页面是由很多个Box 组成的.元素的类型和 display 属性,决定了这个 Box 的类型. 不同类型的 Box, 会参与不 ...
- es的脑裂
一个正常es集群中只有一个主节点,主节点负责管理整个集群,集群的所有节点都会选择同一个节点作为主节点:所以无论访问那个节点都可以查看集群的状态信息. 而脑裂问题的出现就是因为从节点在选择主节点上出现分 ...