Java学习之==>集合体系(待续。。)
一、概述
Java的集合体系,本质上是一个陈放数据的容器,像之前学过的数组也是陈放数据的容器,但在 Java 中数组的长度是固定的,使用起来没那么方便。集合提供了更加强大的功能,使用起来也更方便和快捷。集合体系中提供的方法的底层源代码采用的也是优秀的高效率算法,其他数据容器能操作的,集合都能操作,而且代码更加简洁,思路更加清晰,运行的效率更加高。因此,完全掌握完集合。编程的技能会进一步提高。
二、集合体系
集合作为一个容器,可以存储多个元素,但是由于数据结构的不同,Java 提供了多种集合类,将集合类中共性的功能不断向上抽取,最终形成了集合体系结构。
Java中集合体系的关系图:
Collection:
Map:
- List、Set、Map 都是接口,List 和 Set 继承自 Collection 接口,Map 为独立接口;
- AbstractCollection 作为 AbstractList、HashSet、TreeSet 的父类,实现自 Collection;
- Set下有 HashSet、TreeSet、LinkedHashSet,LinkedHashSet 继承自 HashSet,实现自 Set,HashSet、TreeSet继承自 AbstractCollection 实现自Set;
- List下有ArrayList、LinkedList、Vector,这三者继承自 AbstractList,而 AbstractList 继承自 AbstractCollection,实现自 List;
- Map下有 AbstractMap、HashMap、TreeMap、LinkedHashMap;
三、Collection体系
1、Collection
- 常见的方法有:add()、clear()、contains()、remove()等方法;
- 从 Iterable 接口继承了 iterator() 和 splititerator() 方法;
- 重要实现接口为 List、Set 和 Queue;
2、List
存储特点:
- 有序;
- 可重复;
重要实现类:
- ArrayList
- LinkedList
3、LinkedList
数据结构:
- List是描述有序集合;
- LinkedList是内部使用链表来实现的有序集合;
体系机构图:
4、ArrayList
数据结构
- List是描述有序集合;
- ArrayList是内部使用数组实现的有序集合;
体系结构图
ArrayList VS LinkedList
- 使用完全一致,因为实现自相同的接口List;
- ArrayList适合随机地操作(get,set)列表每个元素(数组的特性)的场景?;
- LinkedList适合插入和删除比较频繁的场景?;
场景略有区别(这一点不准确):?
ArrayList VS Vector
- 内部实现基本一致,略微差异不过是个人的一些写法问题;
- Vector是线程安全的,ArrayList是非线程安全的,在无线程安全需要的情况下,使用ArrayList;
- 注: 一般列表的操作,多数是在线程内操作,因此涉及多线程的场景不是很多;
ArrayList 与 LinkedList 性能测试
我们先来写下面一段测试代码:
/**
* 自测下ArrayList与LinkedList在本地的机器上的性能
*
* 主要是验证 LinkedList是不是所有数据都是删除和修改最快
*
*/
public class Topic1 { public static void main(String[] args) {
List<Integer> list1 = new ArrayList<>(); long start = System.currentTimeMillis();
for (int i=0;i<=10000;i++){
list1.add(i);
}
long end = System.currentTimeMillis();
System.out.println("arraylist time:" + (end - start)); List<Integer> list2 = new LinkedList<>(); long start1 = System.currentTimeMillis();
for (int i=0;i<=10000;i++){
list2.add(i);
}
long end1 = System.currentTimeMillis();
System.out.println("linkedList time:" + (end1 - start1)); }
测试代码
我们分别测试往 ArrayList 和 LinkedList 中添加 1万、10万、80万、100万条数据,查看其执行时间,运行结果如下:
到80万条数据时,ArrayList 用时已经比 LinkedList 少,只不过这时时间还比较接近。
以上结果分别代表1万、10万、80万、100万条数据的测试结果,到100万条数据时,ArrayList 所用时间远远少于 LinkedList。
所以,我们说LinkedList适合插入和删除比较频繁的场景是不准确的,和数据量的大小有关。
四、Set
存储特点:
- 无序;
- 不可重复;
重要实现类:
- HashSet;
- LinkedHashSet;
1、HashSet
数据结构:
- 散列集;
体系结构图:
2、LinkedHashSet
数据结构:
- 散列集;
体系结构图:
五、Map
重要实现类
- HashMap;
- LinkedHashMap;
- TreeMap;
Map体系结构图
未完待续。。。
Java学习之==>集合体系(待续。。)的更多相关文章
- java学习笔记 --- 集合
1.定义:集合是一种容器,专门用来存储对象 数组和集合的区别? A:长度区别 数组的长度固定 集合长度可变 B:内容不同 数组存储的是同一种类型的元素 而集合可以存储不同类型的元素 C:元 ...
- Java学习之集合(Collection接口)
集合类的由来: 对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定,就使用集合容器进行存储 集合特点: 1.用于存储对象的容器 2.集合长度可变 3.不可以存储基本数据类型 集合体系的顶层C ...
- java学习笔记—集合之Map集合
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 12.0px Times } p.p2 { margin: 0.0p ...
- Java学习:集合双列Map
数据结构 数据结构: 数据结构_栈:先进后出 入口和出口在同一侧 数据结构_队列:先进先出 入口和出口在集合的两侧 数据结构_数组: 查询快:数组的地址是连续的,我们通过数组的首地址可以找到数组,通过 ...
- Java学习之==>异常体系
一.定义 程序运行时总是会遇到各种各样的问题,Java中的异常体系就是针对这些问题提出的统一的处理方案.在Java中,将这些各种各样的问题进行归类后,统一称为异常. 二.分类 我们先来看看下面这个图: ...
- 0015 Java学习笔记-集合-TreeMap集合
主要的方法 构造方法: TreeMap(); TreeMap(Comparator<?super K> comparator); TreeMap(Map<? extends K,? ...
- 0014 Java学习笔记-集合-HashMap集合
主要的方法 + 构造方法: * HashMap(); - 默认大小16,负载因子0.75 * HashMap(int initialCapacity); * HashMap(int initialCa ...
- Java学习日记 集合
一.接口Map<K,V>1.V put(K key, V value)2.int size()3.public class HashMap<K, V> implements M ...
- Java学习笔记--集合元素的比较Comparable,Comparator
原文见: http://www.cnblogs.com/sunflower627/p/3158042.html 1. Comparator 和 Comparable 相同的地方 他们都是java的一个 ...
随机推荐
- jaxb解析xml工具类
[quote]jaxb jdk 自带的解析xml的一种方式支持,只需要用注解对javabean进行数据绑定[/quote] package com.nnk.flowrecharge.common;im ...
- 使用Spring Mail发送QQ邮件
一.邮箱设置 QQ邮箱设置:http://service.mail.qq.com/cgi-bin/help?id=28, 下面这些服务需要开启(需要设置邮箱独立密码): 二.applicationCo ...
- 借助Charles来测试移动端-上篇
随着现在互联网的兴起,移动端的测试需求越来越多,但是随着用户越来越多,迭代需求越来越频繁,或因为测试环境的接口不稳定,或因为多个业务系统互相关联,导致移动端测试后置,有时候提前介入了,也只能干耗时间, ...
- C++的一些黑暗料理
本文中的“黑暗料理”仅限本人在学习C++的过程中感觉易忘.有趣.不为大多数人所知的一些特性. 1. C++中int型数据在VC++环境下最小值为什么是 -32678,而不是-32677,其中涉及到原码 ...
- U-Boot Driver Model领域模型设计 (转)
需求分析 在2014年以前,uboot没有一种类似于linux kernel的设备驱动模型,随着uboot支持的设备越来越多,其一直受到如下问题困扰: 设备初始化流程都独立实现,而且为了集成到系统,需 ...
- 字符串格式化-String类format方法
常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象. format()方法有两种重载形式. 显示不同转换符实现不同数据类型到字符串的转换,如图所示: 测 ...
- 百度之星 初赛三 最短路 2 Dijkstra
打比赛的时候切的,不过竟然 wa 了 14 次~ 挺简单的,直接在跑 $Dijkstra$ 的时候记录一下路径最大值就好了. #include <bits/stdc++.h> #defin ...
- C语言 - 堆和栈
一.堆内存 1.就是程序员手动管理的一块内存,在C语言中,可以理解为用malloc.realloc等申请空间的一些函数,这些函数所申请的空间就是堆空间 2.C语言中,堆空间是申请和释放 malloc/ ...
- Apicloud_(项目)网上书城02_后端数据获取
Apicloud_(项目)网上书城01_前端页面开发 传送门 Apicloud_(项目)网上书城02_后端数据获取 传送门 Apicloud_(项目)网上书城03_拓展模块实现 传送门 ApiClou ...
- docker-compose常用命令(持续更新...)
build 构建或重建服务 help 命令帮助 kill 杀掉容器 logs 显示容器的输出内容 port 打印绑定的开放端口 ps 显示容器 pull 拉取服务镜像 restart 重启服务 rm ...