AryyayList,LinkedList,Vector,HashMap,HashTable区别

集合小结:

Collection

在这里插入图片描述

集合是用来存储引用类型数据的容器,集合只能存储引用类型数据,不能存储基本类型数据。
---- Collection集合,单个存储
基本操作:
	add(o),	contains(o),	remove(o),	iterator() 	
--------List
	有序,可重复,存储数据的顺序与添加顺序一致,可以存储重复的数据
	为每个元素指定了索引值,增加了针对索引值的操作
		add(index, o),		remove(index)		get(index)
	在JDK8中,List增加了sort(Comparator)排序功能
	------------ArrayList
		底层是数组, 访问快,添加删除慢
		初始化容量: 10
		扩容: 1.5倍
	------------Vector
		底层是数组,它是线程安全的
		初始化容量: 10
		扩容: 2倍
	------------LinkedList
		底层是双向链表, 添加删除效率高,访问慢
		增加了针对第一个最后一个元素的操作
		可以用来模拟栈,push()/pop(), 模拟队列: offer()/poll()
--------Set
	无序,不可重复,存储顺序与添加顺序可能不一样,不允许存储重复的数据
	------------HashSet
		底层是HashMap
		向HashSet添加元素就是把元素作为键添加到底层的HashMap中
		HashSet就是HashMap键的集合
	------------TreeSet
		实现了SortedSet接口,可以对集合中的元素自然排序,要求集合中元素必须是可比较的
		1)要么在构造方法中指定Comparator比较器
		2)要么让元素的类实现Comparable接口
		底层是TreeMap
		向TreeSet添加元素就是把元素作为键添加到底层的TreeMap中
		TreeSet就是TreeMap键的集合

应用场景:
单个存储数据时使用Collection集合

  • 如果允许存储重复的数据选择List
    如果以访问为主,选择ArrayList
    如果频繁添加/删除选择LinkedList
    如果开发多线程程序,也不使用Vector,使用java.util.concurrent包(juc)中线程安全的集合
  • 如果不允许存储重复的数据选择Set
    如果不需要排序就选择HashSet
    如果需要排序选择TreeSet

注意:
List集合与HashSet集合在存储自定义类型数据时,要重写equals()/hashCode()方法, contains(o),remove(o) 需要调用元素的equals()方法 。
TreeSet集合判断是否相同的元素,是根据Comparator/Comparable的比较结果是否为0来判断的,如果比较结果为0就认为是相同的元素。

Map

在这里插入图片描述
asaa

---- Map集合,	按<键,值>的形式存储
基本操作:
	put( k , v),		containsKey(k)		containsValue(v)		get(k)
	keyset()		values()		entrySet()
	remove(k)		replace(k, v)
--------HashMap
	底层是哈希表, 哈希表是一个数组,数组的每个元素是链表
	初始化容量: 16
	加载因子: 0.75 , 当键值对数量 > 容量 * 加载因子时, 扩容
	扩容: 2倍
	键值可以为null
	指定初始化容量,系统会自动调整为2的幂次方, 为了快速计算数组的下标
-------- HashTable
	底层是哈希表, 它是线程安全的 , HashMap不是线程安全的
	初始化容量: 11
	加载因子: 0.75 , 当键值对数量 > 容量 * 加载因子时, 扩容
	扩容: 2倍 + 1 
	键值都 不 可以为null
	指定初始化容量, 
	------------ Properties
		继承了HashTable
		键值都是String字符串
		经常用来设置/读取系统属性: setProperty() , getProperty()
--------TreeMap
	根据键自然排序, 要求键必须是可比较的
	1)在构造方法中指定Comparator比较器
	2)让键实现Comparable接口
	TreeMap的键是根据红黑树进行排序的,红黑树是一种自平衡二叉树
	在开发时,选择在构造方法中指定Comparator,还是选择让键实现Comparable接口?
	一般让键实现Comparable接口,定义一个使用最广泛的比较规则
	可以通过Comparator定义很多种不同的比较规则

应用场景:
存储<键,值>对时选择Map

  • 如果不需要根据键排序就使用HashMap
  • 如果需要根据键排序就选择TreeMap
  • 如果开发多线程程序,使用java.util.current包中线程安全的集合类,HashTable并发效率低。juc包中ConcurrentHashMap并发效率高,在JDK7前ConcurrentHashMap采用分段锁协议,默认分为 16段锁,在JDK8中对ConcurrentHashMap进行性能提升,采用CAS(Compare And Swap)。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃香菜的胡先森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值