参考资料

参考 HashMap

类似 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 高级-集合框架的更多相关文章

  1. java的集合框架最全详解

    java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...

  2. java.util 集合框架集合

    java的集合框架为程序提供了一种处理对象组的标准方式.设计了一系列标准泛型接口: ⑴Collection ()接口,扩展了Iterable接口,位于集合层次结构的顶部,因此所有的集合都实现Colle ...

  3. Java基础——集合框架

    Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...

  4. java的集合框架之一

    java是一套很成熟的东西,很多商用的东西都喜欢用它,用的人多,稳定.不过一般也不怎么说起它,因为太常见了,私下里说,写java应用层得就像农民工,每一处都是搭积木,根据设计师的东西如何优雅地搭好积木 ...

  5. 浅谈Java的集合框架

    浅谈Java的集合框架 一.    初识集合 重所周知,Java有四大集合框架群,Set.List.Queue和Map.四种集合的关注点不同,Set 关注事物的唯一性,List 关注事物的索引列表,Q ...

  6. java的集合框架set 和map的深入理解

    Java的集合框架之Map的用法详解 Map有两种比较常用的实现:HashMap 和 TreeMap. HashMap: HashMap 也是无序的,也是按照哈希编码来排序的,允许使用null 值和n ...

  7. Java 之 集合框架(JCF)

    1.集合框架 a.框架:为了实现某一目的或功能,而预先提供的一系列封装好的.具有继承或实现关系的类与集合 b.集合:①定义:Java中对一些数据结构和算法进行封装,即封装(集合也是一种对象) ②特点: ...

  8. 十五、Java基础---------集合框架体系以及List

    在介绍集合之前先说一下数组,正如我们所知,数组是某一类型数据的集合,强调的是数据,而且必须单一:集合框架的不同之处在于存储的数据类型没有任何限制,既可以存储基本数据类型(会自动提升为相应的包装类)也可 ...

  9. Java的集合框架

    01.为什么要使用集合框架? 解析:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象,那么可以使用Java集合框架. 如果启用集合的删除方法,那么集合中所有元素的索引会自动维护. 集合 ...

随机推荐

  1. SpringBoot_04springDataJPA

    说明:底层使用Hibernate 一.springDataJPA和mybatisPlus的使用区别 第一步: 把mybatisPlus的依赖.配置删除 包括:实体类的注解.引导类的mapperScan ...

  2. 7.css3表格、列表、边框的样式设置--list/border

    1.css表格: ①Border-collapse是否把表格边框合并为单一的边框.Separate默认值,collapse合并. ②Border-spacing分割单元格边框的距离. ③Caption ...

  3. Nginx中配置https中引用http的问题

    Nginx中配置https中引用http的问题 遇到问题: 今天公司要在后台增加直播入口,使用腾讯云的实时音视频,要求是必须使用https,在配置完强制跳转https候,发现后台无法上传图片,在浏览器 ...

  4. 内置的configparser模块和hashlib模块

    #configparser模块:配置解析模块 import configparser config = configparser.ConfigParser() #创建一个配置解析对象 config[& ...

  5. EffectiveC++01-03

    导读 作者Scott Meyers在如何有效运用C++方面给出了55个具体的做法,大致分为两类: 一般性的设计策略,集中于"如何在不同的做法中选择一种完成任务" 选择inherit ...

  6. JavaScript变量和字面量

    一.什么是变量? 首先了解一下什么是内存:内存就是保存程序在运行过程中,所需要用到的数据8bit(比特是表示信息的最小单位). 8bit=1byte 1024byte=1MB 1024MB=1GB 1 ...

  7. Python_015(面向对象(接口类,抽象类,多态,封装)

    一.抽象类与接口类 1.抽象类:抽象即类似或者说比较像的部分,继承描述的是父类与子类的一种关系,要找出这种关系,必须先抽象再继承; a:抽象分成两个层次: 1)由对象->类:将两个有相似地方的对 ...

  8. <知识整理>2019清北学堂提高储备D4

    今天主要讲一下数学的知识. 一.进制转换: 十进制到k进制:短除法:顺除至0,逆序取余. k进制转十进制:乘权相加. 常见进制:四进制(对应2位二进制).八进制(对应3位二进制).十六进制(对应4位二 ...

  9. BFC、IFC、GFC和FFC

    基本概念 Box 是 CSS 布局的对象和基本单位, 直观点来说,就是一个页面是由很多个Box 组成的.元素的类型和 display 属性,决定了这个 Box 的类型. 不同类型的 Box, 会参与不 ...

  10. es的脑裂

    一个正常es集群中只有一个主节点,主节点负责管理整个集群,集群的所有节点都会选择同一个节点作为主节点:所以无论访问那个节点都可以查看集群的状态信息. 而脑裂问题的出现就是因为从节点在选择主节点上出现分 ...