Java中各种集合特点总结
1:集合:
(1) Collection(单列集合)
List(有序,可重复)
ArrayList
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
Vector
底层数据结构是数组,查询快,增删慢
线程安全,效率低
LinkedList
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
Set(无序,唯一)
HashSet
底层数据结构是哈希表。
哈希表依赖两个方法:hashCode()和equals()
(一般规则:对象equals 是true的话,hashCode需要相同,但是hashCode相同的对象不一定equals,这就是所谓的冲突现象,但是有不同的冲突解决方法。你的hashCode()设计的好的话冲突也就小了。比如楼上给出的超出int范围之后这种hashCode()实现,对象肯定是无数的,但是hash实现是有限的呢,所以冲突了。)
执行顺序:
首先判断hashCode()值是否相同
是:继续执行equals(),看其返回值
是true:说明元素重复,不添加
是false:就直接添加到集合
否:就直接添加到集合
最终:
自动生成hashCode()和equals()即可
LinkedHashSet
底层数据结构由链表和哈希表组成。
由链表保证元素有序。
由哈希表保证元素唯一。
TreeSet
底层数据结构是红黑树。(是一种自平衡的二叉树)
如何保证元素唯一性呢?
根据比较的返回值是否是0来决定
如何保证元素的排序呢?
两种方式
自然排序(元素具备比较性)
让元素所属的类实现Comparable接口
比较器排序(集合具备比较性)
让集合接收一个Comparator的实现类对象
(2)Map(双列集合)
A:Map集合的数据结构仅仅针对键有效,与值无关。
B:存储的是键值对形式的元素,键唯一,值可重复。
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()
遍历方式:
根据键找值
根据键值对对象分别找键和值。
转载于:https://www.cnblogs.com/heiming/p/5976631.html
Java中各种集合特点总结相关推荐
- java去重复的集合_如何去除Java中List集合中的重复数据
1.循环list中的所有元素然后删除重复 public class duplicatRemoval { public static List removeDuplicate(List list){ f ...
- Java中Set集合是如何实现添加元素保证不重复的?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「武培轩」 Java中Set集合是如何实 ...
- 万字长文深入理解java中的集合-附PDF下载
文章目录 1. 前言 2. List 2.1 fail-safe fail-fast知多少 2.1.1 Fail-fast Iterator 2.1.2 Fail-fast 的原理 2.1.3 Fai ...
- (转)java中对集合对象list的几种循环访问总结
Java集合的Stack.Queue.Map的遍历 在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack.Queue.Map类型的遍历,还是有一些讲 ...
- java中的集合框架_JAVA中的集合框架(上)List
第一节 JAVA中的集合框架概述 集合的概念,现实生活中:很多事物凑在一起就是一个集合:数学中的集合:具有相同属性事物的总体:JAVA中的集合:是一种工具类,就像是容器,储存任意数量的具有共同属性的对 ...
- java中各种集合的用法和比较
一,java中各种集合的关系图 Collection 接口的接口 对象的集合 ├ List 子接口 按进入先后有序保存 可重复 │├ L ...
- java中的集合_Java 集合介绍,常用集合类
JAVA 集合 在处理数据的过程中经常会需要一个容器来存储某一类型的数据,Java 中的数组就是这样一种容器.但 Java 中的数组有其局限性,定义后的数组长度不可变,超出数组长度后就不能再存放数据了 ...
- java 中的集合_JAVA中的集合
JAVA中集合,是java中的基础概念,今天接着跟讲课准备课件的机会,重新整理一下关于JAVA中的集合的概念. 集合的概念 java中的集合类是用来存放对象的 集合相当于一个容器,里面包容着一组对象- ...
- Java中List集合的三种遍历方式(全网最详)
Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...
- 10.JAVA中的集合(数据结构)
Java中的集合 包含以下结构: 数组-线性表 链表 栈 队列 散列表 二叉树 映射关系(key-value) List集合 特点:[有序.重复] [线性表--数组] ArrayList 定义 线程 ...
最新文章
- 微服务架构及其最重要的 10 个设计模式!
- html5画布显示不出来,运行后html5画布没出来
- SQL Server 6.5 如何升级到SQL Server 2000—以前原创(二)
- UNIX 网络协议的深度分析
- c语言 amp amp 逻辑运算符,C++编程中的或||、与amp;amp;、非!逻辑运算符基本用法整理...
- java 一维数组_java基础 ---- 一维数组
- python基础代码技巧_写Python必须知道的这几个代码技巧!你会吗?
- matlab销量预测的数学模型,数学建模:酒店最优化问题.用matlab算出《酒店价格预测模型》...
- RHEL5.9下cacti监控的部署详解
- 「1024 程序员节」各大公司和程序员们都是怎么过的?你都做了哪些计划或安排?
- python基于给定时间戳生成 未来/过去 前进/倒退 n个小时的时间戳
- C#两种方法输出1~100间的质数(素数)
- PyCharm中 Django导入views时出现报错红线
- Android service后台执行定时任务
- 案例1—MP3在线搜索下载程序
- Windows热门的八款绘图软件总有一款是你想要
- 法拉帝港股上市:市值76亿港元 9个月交付179艘游艇
- 2018网易秋招编程题【彩色砖块】
- The art of computer programming Donald E. Knuth volumn one third edition读书笔记1
- Yii2 用户登录
热门文章
- linux驱动:TI+DM8127+GPIO(四)之设备
- 计算机科学实验教学示范中心,校领导调研计算机科学与技术国家级实验教学示范中心...
- linux 查看剪贴板历史,Clipboard History Manager插件,查看浏览器剪贴板历史记录
- linux特殊系统变量,linux环境几个特殊的shell变量
- 合并道路_资质改革已经确定!盘点被合并的资质!有这资质的要注意了
- IDEA配置GitHub和Gitee
- 梯度下降算法_神经网络梯度下降算法
- iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求
- 【iOS】自定义控件入门:可拖动的环形进度
- ES5-Array-push(),pop(),shift(),unshift()