java中集合的组成及特点
1:集合
Collection(单列集合)
List(有序,可重复)
ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高
Vector 底层数据结构是数组,查询快,增删慢 线程安全,效率低
LinkedList 底层数据结构是链表,查询慢,增删快 线程不安全,效率高
Set(无序,唯一)
HashSet 底层数据结构是哈希表 哈希表依赖两个方法:hashCode()和equals()
执行顺序:
首先判断hashCode()值是否相同
是:继续执行equals(),看其返回值 是true:说明元素重复,不添加;是false:就直接添加到集合
否:就直接添加到集合
最终:自动生成hashCode()和equals()即可
LinkedHashSet 底层数据结构由链表和哈希表组成,由链表保证元素有序,由哈希表保证元素唯一。
TreeSet 底层数据结构是红黑树。(是一种自平衡的二叉树)
如何保证元素唯一性呢?根据比较的返回值是否是0来决定
如何保证元素的排序呢?
自然排序(元素具备比较性) 让元素所属的类实现Comparable接口
比较器排序(集合具备比较性) 让集合接收一个Comparator的实现类对象
Map(双列集合)
Map集合的数据结构仅仅针对键有效,与值无关。存储的是键值对形式的元素,键唯一,值可重复。
HashMap
底层数据结构是哈希表。线程不安全,效率高,哈希表依赖两个方法:hashCode()和equals()
执行顺序:
首先判断hashCode()值是否相同
是:继续执行equals(),看其返回值,是true:说明元素重复,不添加,是false:就直接添加到集合
否:就直接添加到集合
最终:自动生成hashCode()和equals()即可
LinkedHashMap 底层数据结构由链表和哈希表组成,由链表保证元素有序。由哈希表保证元素唯一。
Hashtable
底层数据结构是哈希表。线程安全,效率低,哈希表依赖两个方法:hashCode()和equals()
执行顺序:
首先判断hashCode()值是否相同
是:继续执行equals(),看其返回值,是true:说明元素重复,不添加,是false:就直接添加到集合
否:就直接添加到集合
最终:自动生成hashCode()和equals()即可
TreeMap
底层数据结构是红黑树。(是一种自平衡的二叉树)
如何保证元素唯一性呢? 根据比较的返回值是否是0来决定
如何保证元素的排序呢?
自然排序(元素具备比较性):让元素所属的类实现Comparable接口
比较器排序(集合具备比较性):让集合接收一个Comparator的实现类对象
2.关于集合选取原则
是否是键值对象形式:
是:Map
键是否需要排序:
是:TreeMap
否:HashMap
不知道,就使用HashMap。
否:Collection
元素是否唯一:
是:Set
元素是否需要排序:
是:TreeSet
否:HashSet
不知道,就使用HashSet
否:List
要安全吗:
是:Vector
否:ArrayList或者LinkedList
增删多:LinkedList
查询多:ArrayList
不知道,就使用ArrayList
不知道,就使用ArrayList
3:集合的常见方法及遍历方式
Collection:
add()
remove()
contains()
iterator()
size()
遍历:
增强for
迭代器
|--List
get()
遍历:
普通for
|--Set
Map:
put()
remove()
containskey(),containsValue()
keySet()
get()
value()
entrySet()
size()
遍历:
根据键找值
根据键值对对象分别找键和值
java中集合的组成及特点的更多相关文章
- Java中集合List,Map和Set的区别
Java中集合List,Map和Set的区别 1.List和Set的父接口是Collection,而Map不是 2.List中的元素是有序的,可以重复的 3.Map是Key-Value映射关系,且Ke ...
- java中集合Collection转list对象
参考:java中集合Collection转list对象 首先我的需求是获取到购物车列表,购物车列表是一个Map对象,构造方法获取购物项,这里购物项是Collection对象 // 购物项集合,K商品I ...
- JAVA中集合转数组遍历
JAVA中集合的遍历的一种方法时集合转数组遍历,也是就调用Collection中的toArray(). 代码: public static void main(String[] args) { ...
- Java中集合List,Map和Set的差别
Java中集合List,Map和Set的差别 1.List和Set的父接口是Collection.而Map不是 2.List中的元素是有序的,能够反复的 3.Map是Key-Value映射关系,且Ke ...
- Java中集合的概述
一.集合和数组的区别 1.数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用. 2.集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数 ...
- Scala中集合类型与java中集合类型转换
对于java中的集合元素并不能在scala中拿来就用的,需要进行相应的转换. 1. 转换规则如下 从下面可以看出,有些可以相互转换的,有些只能单向转换: scala.collection.Iterab ...
- Java中集合关键字的区别
1. ArrayList.Vector和Stack有什么区别? 1.ArrayList的方法和实现基本上和Vector一样,底层都是数组的实现(简:API基本一样) 2.Stack继承了Vec ...
- Java中集合概念
集合的由来: 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行储存,而想要储存多个对象,就不能是一个基本的变量,而应该是一个 ...
- JAVA中集合输出的四种方式
在JAVA中Collection输出有四种方式,分别如下: 一) Iterator输出. 该方式适用于Collection的所有子类. public class Hello { public stat ...
- java中集合的扩容
对于Java中的各种集合类,根据底层的具体实现,小结了一下大致有3种扩容的方式: 1.对于以散列表为底层数据结构实现的,(譬如hashset,hashmap,hashtable等),扩容方式为当链表数 ...
随机推荐
- 【LOJ#10154】选课
题目中所说的每门课都可能有先修课,也可能没有先修课,因此课与课之间的关系构成了一颗森林. 这种树上选择若干物品的最优解问题对应着树形背包问题. 阶段:子树的大小 状态:在当前子树中,选取 i 门课能够 ...
- http和https的作用与区别
PS: https就是http和TCP之间有一层SSL层,这一层的实际作用是防止钓鱼和加密.防止钓鱼通过网站的证书,网站必须有CA证书,证书类似于一个解密的签名.另外是加密,加密需要一个密钥交换算法, ...
- (大数取模)Big Number hdu1212
Big Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- generator详解
generator函数 yield可以返回值,也可以传入值 形式: 注意!generator不能写成arrow function的形式!!! function *函数(){ 代码1... let a ...
- Nginx使用Location匹配URL进行伪静态
基础知识 Nginx location 配置语法 1. location [ = | ~ | ~* | ^~ ] uri { ... } 2. location @name { ... } locat ...
- Docker 入门 第四部分: Swarms
目录 Docker 入门 第四部分: Swarms 先决条件 介绍 理解Swarm集群 部署swarm 创建一个集群 在swarm集群上部署你的app应用 为 swarm管理器配置一个docker-m ...
- springboot系列之-logging
配置文件以application.yml为例说明: Spring Boot默认的日志组件为Logback. 一. 日志配置参数: logging: file: # 日志文件,绝对路径或相对路径 pat ...
- 小程序Promise不支持finally解决方案
小程序Promise不支持finally解决方案 代码片段 点击链接即可在微信开发者工具中查看代码wechatide://minicode/t2eidemj7P3X git地址 基本思路 小程序的Pr ...
- Python官方操作Excel文档
xlwt 1.3.0 Downloads ↓ Library to create spreadsheet files compatible with MS Excel 97/2000/XP/2003 ...
- readn.c
#include <errno.h> #include <unistd.h> ssize_t readn(int fd, void *vptr, size_t n) { siz ...