Java基础——集合(持续更新中)
集合框架

Java.util.Collection
Collection接口中的共性功能
1,添加
booblean add(Object obj); 往该集合中添加元素,一次添加一个
boolean addAll(Collection c); 将指定 collection 中的所有元素都添加到此 collection 中
2,删除
void clear(); 移除此 collection 中的所有元素
boolean remove(Object o); 从此 collection 中移除指定元素的单个实例,如果存在的话
boolean removeAll(Collection e); 移除此 collection 中那些也包含在指定 collection 中的所有元素
3,获取
int size(); 返回此 collection 中的元素数。
4,判断
boolean isEmpty();
boolean contains(Object o); 如果此 collection 包含指定的元素,则返回 true。
boolean containsAll(Collection c); 如果此 collection 包含指定 collection 中的所有元素,则返回 true。
5,将集合转成数组
toArray(); 返回包含此 collection 中所有元素的数组。
toArray(T[ ] a); 返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
6,取出集合元素
Iterator iterator(); 获取集合中元素上迭代功能的迭代器对象;
返回在此 collection 的元素上进行迭代的迭代器。
迭代:取出元素的一种方式;
迭代器:具备着迭代功能的对象;
而迭代器对象不需要new,直接通过iterator()方法获取即可,迭代器是取出Collection集合中元素的公共方法.
Collection
|--List:有序(存入的顺序和取出的顺序一致)有索引,允许重复元素
|--Set:不允许重复元素
重点List接口中的特有方法:它的特有方法都是围绕索引定义的.List支持增删改查;
1.增
add(index,element);
2,删
remove(index);
3,改
set(index,new element);
4,查
int indexOf(element);
element get(index);
List集合的具体子类;子类之所以区分是因为内部的数据接口(存储数据的方式)不同。
JDK1.0 |--Vector:数据结构是数组;数组是可变长度的(不断new新数组并将原数组元素复制到新数组),线程是同步的,增删和查询都比较慢。
JDK1.2 |--ArrayList:也是数组结构,也是长度可变的。线程不同步的,替代了Vector增删速度不快,查询速度很快。
|--LinkedList:链表结构,线程不同步的。增删速度很快,查询速度较慢。
LinkedLisgt的特特殊方法:
1,增加元素
addFirst(E e);将指定元素插入此列表的开头。
addLast(E e):将指定元素添加到此列表的结尾。
2,获取元素
getFirst();返回此列表的第一个元素。
getLast();返回此列表的最后一个元素。
3,删除元素
removeFirst();移除并返回此列表的第一个元素。
removeLast(); 移除并返回此列表的最后一个元素。
Set集合:不允许重复元素;和Collection的方法相同;Set集合取出方法只有一个:迭代器
|--HashSet:哈希(散列)表结构
|--LinkedHashSet:哈希表+链表结构。可以实现有序
此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
如何保持元素唯一性?
元素必须覆盖hashCode()和equals()方法;
hashCode()方法是为了根据元素自身的特点确定哈希值;覆盖equals()方法是为了解决哈希值的冲突(只有hashCode()方法一致时在需要equals()方法)。
|--TreeSet:可以对元素进行排序;不同步的,二叉树数据结构
排序方式一:需要元素具备比较功能.所以元素需要实现Comparable接口,覆盖CompareTo方法
如何保证元素唯一性?
参考的就是比较方法的返回值是否为0;是,则是重复元素,不进行存储。
需求中也有这样的一种情况,元素具备的比较功能不是所需要的,也就是说不想按照自然排序的方法,而是按照自定义的排序方式,对元素进行排序。
而且,存储到TreeSet中的元素万一没有比较功能,该如何排序呢?
排序方式二:实现Comparator接口覆盖Compare()方法。将Comparator接口的对象,作为参数传递给TreeSet集合的构造函数。
比较器较为灵活,自然排序通常作为元素的默认排序,一般不建议改动,要想自定义排序方法,推荐排序方式二。
集合技巧:
JDK1.2以后出现的集合框架中的常用子类对象,存在的规律。前缀名是数据结构名,后缀名是所属体系名
|--List
ArrayList:数组结构;看到数组结构,就需要知道 查询快,看到List就知道可以重复,可以增删改查。
LinkedList:链表结构,增删快。特有方法:xxxFirst xxxLast addxxx getxxx removexxx
|--Set
HashSet:哈希表,查询速度更快,一看到这个就需要想到元素必须覆盖hashCode()方法和equals()方法。不保证有序,看到Set,就需要知道元素不可以重复。
LinkedHashSet:链表+哈希表。因为由链表,所以可以实现有序。
TreeSet:二叉树,可以排序。一看到这个集合要想到两种比较方式: (1)一种是自然排序Comparable (2)一种是自定义比较器 Comparator
Map集合:双列集合,一次存储一对,键值对;要保证键的唯一性,重复键会覆盖前面键的值。
共性的功能
1,添加
V put(K key ,V value); 将指定的值与此映射中的指定键关联。
putAll(Map<k,v> map); 从指定映射中将所有映射关系复制到此映射中。
2,删除
void clear(); 从此映射中移除所有映射关系。
v remove(key); 如果存在一个键的映射关系,则将其从此映射中移除。
3,判断
boolean containsKey(Object o); 如果此映射包含指定键的映射关系,则返回 true。
boolean containsValue(Object o); 如果此映射将一个或多个键映射到指定值,则返回 true。
boolean isEmpty(); 如果此映射未包含键-值映射关系,则返回 true。
4,获取
V get(key); 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
int size(); 返回此映射中的键-值映射关系数。
Map
|--Hashtable:哈希表结构,是同步的,不允许null键、null值;。
|--HashMap:哈希表结构,是不同步的,允许null键、null值;。
|--TreeMap:二叉树结构,是不同步的。可以对map集合中的键进行排序
Java基础——集合(持续更新中)的更多相关文章
- Java基础——多线程(持续更新中)
如何建立一个执行路径呢? 通过查询API文档 java.lang.Thread类 该类的描述中有创建线程的两种方式 1.继承Thread类 (1).将类声明为 Thread 的子类 (2).该子类应重 ...
- git使用技巧集合(持续更新中)
git使用技巧集合(持续更新中) 在团队协作中,git.svn等工具是非常重要的,在此只记录一些git使用过程中遇到的问题以及解决方法,并且会持续更新. 1.git commit之后,还没push,如 ...
- Pig语言基础-【持续更新中】
***本文参考了Pig官方文档以及已有的一些博客,并加上了自己的一些知识性的理解.目前正在持续更新中.*** Pig作为一种处理大规模数据的高级查询语言,底层是转换成MapReduce实现的, ...
- 常见算法合集[java源码+持续更新中...]
一.引子 本文搜集从各种资源上搜集高频面试算法,慢慢填充...每个算法都亲测可运行,原理有注释.Talk is cheap,show me the code! 走你~ 二.常见算法 2.1 判断单向链 ...
- nodejs基础【持续更新中】
简介 Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-dr ...
- php 常用函数集合(持续更新中...)
php 常用函数集合 在php的开发中,巧妙的运用php自带的一些函数,会起到事半功倍的效果,在此,主要记录一些常用的函数 1.time(),microtime()函数 time():获取当前时间戳 ...
- Java笔记(持续更新中)
Java语言的特点: 面向对象(封装,继承,多态) 平台无关性(JVM运行.class文件) 语言(泛型,Lambda) 类库(集合,并发,网络,IO/NIO) JRE(Java运行环境,JVM,类 ...
- Linux 基础命令 持续更新中...
1.ls 显示当前文件/文件夹 显示文件大小: ls -lh 显示隐藏文件: ls -a 显示文件详细信息: ls -l (ll)2.pwd 显示当前所在路径 cat 显示当前文件下所有内容3.cd ...
- linux运维安全工具集合[持续更新中..]
lynis 安全漏洞检测工具 https://cisofy.com/download/lynis/ https://cisofy.com/files/lynis-2.2.0.tar.gz ...
随机推荐
- Python定时任务框架APScheduler
http://blog.csdn.net/chosen0ne/article/details/7842421 APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz ...
- websocket(一)--握手
最近在琢磨怎么实现服务端的消息推送,因为以前都是通过客户端请求来获取信息的,如果需要实时信息就得轮询,比如通过ajax不停的请求. websocket相当于对HTTP协议进行了升级,客户端和服务端通过 ...
- Python replace()方法
描述 Python replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次. 语法 replace()方法语法: st ...
- 聊聊Socket、TCP/IP、HTTP、FTP及网络编程
1 这些都是什么 既然是网络传输,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. 1.1 TCP ...
- appium 出现报错“A new session could not be created. (Original error: Requested a new session but one was in progress)”的解决方式!
报错点:selenium.common.exceptions.WebDriverException: Message: A new session could not be created. (Ori ...
- Python GIL(Global Interpreter Lock)
一,介绍 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native t ...
- 【重学计算机】操作系统D6章:并发程序设计
1. 并发程序的基本概念 程序顺序性 内部顺序性:CPU严格按照顺序执行指令 外部顺序性:程序员设计程序时往往用顺序设计的思想 顺序程序特性 程序执行的顺序性 计算环境的封闭性: 程序执行时犹如独占资 ...
- asp.net core系列 57 IS4 使用混合流(OIDC+OAuth2.0)添加API访问
一.概述 在上篇中,探讨了交互式用户身份验证,使用的是OIDC协议. 在之前篇中对API访问使用的是OAuth2.0协议.这篇把这两个部分放在一起,OpenID Connect和OAuth 2.0组合 ...
- 前端笔记之ES678&Webpack&Babel(下)AMD|CMD规范&模块&webpack&Promise对象&Generator函数
一.AMD和CMD规范(了解) 1.1传统的前端开发多个js文件的关系 yuan.js中定义了一个函数 function mianji(r){ return 3.14 * r * r } main.j ...
- Asp.NetCore轻松学-部署到 Linux 进行托管
前言 上一篇文章介绍了如何将开发好的 Asp.Net Core 应用程序部署到 IIS,且学习了进程内托管和进程外托管的区别:接下来就要说说应用 Asp.Net Core 的特性(跨平台),将 .Ne ...