java容器
java容器分类
java容器分为两大类,分别是Collection和Map,而Collection是单个元素的集合,又可以分为List,Queue,Set三大类,而Map是用来存储键值对的,又可以分为HashMap和TreeMap两种
以下是java容器的图解:
粗略解析:
一. Collection
Collection是一个集合类的接口,他有三种子类型集合,分别是List,Set,Queue
使用场景:
1. List
List的特点就是所有的元素是可以重复的。 包括三种Arraylist,LinkedList,Vector
①. ArrayList
ArrayList是一个可以动态增长的数组, ArrayList由于底层是使用数组实现的,所以随机访问速度快,插入删除较慢
使用场景:
1.频繁访问列表中的某一个元素。
2.只需要在列表末尾进行添加和删除元素操作。
常用方法:
————————————————
add():添加元素
addAll():将集合中的所有元素添加到ArrayList中
clear():清空元素
contains():判断元素是否在ArrayList中
get():根据索引获取元素
remove():根据索引删除元素
size():返回ArrayList大小
set():根据索引修改元素
————————————————
② . LinkedList
LinkedList是使用双向链表实现的,在列表中插入和删除速度快,但是查找需要遍历整个链表,速度较慢。使用LinkedList可以实现很多队列、栈的数据结构
适用场景:
1.你需要通过循环迭代来访问列表中的某些元素。
2.需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作
常用方法:
————————————————
add():添加元素
addFirst():在头部添加元素
addLast:在尾部添加元素
addAll():将集合中的所有元素添加到LilnkedList中
clear():清空元素
contains():判断元素是否在LilnkedList中
get():根据索引获取元素
getFirst():获取头部元素
getLast():获取尾部元素
remove():根据索引删除元素
removeFirst():删除头部元素
removeLast():删除尾部元素
size():返回LilnkedList大小
set():根据索引修改元素
————————————————
③ . Vector
Vector是一个已经被弃用的类,因为他是线程同步的,而我们平时使用的时候都是非同步的,使用同步的坏处就是会在一个记录上加锁,防止多个程序访问同一条数据导致数据不同步。这样会导致访问速度变慢。
2. Queue队列
队列是一个满足“先进先出”的数据结构,包含两种 LinkedList,PriorityQueue
①. LinkedList
LinkedList提供了方法支持队列操作,并且实现了Queue接口,所以LinkedList是队列的一种实现,可以通过LinkedList向上转型为Queue。
②. PriorityQueue
PriorityQueue是优先级队列
3. Set集合
集合中的元素不可以重复,包含HashSet,TreeSet,HashSet三种实现
①. HashSet
HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
HashSet 允许有 null 值。
HashSet 是无序的,即不会记录插入的顺序。
HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时实现同步对 HashSet 的并发访问。
HashSet 实现了 Set 接口。
常用方法
————————————————
add():添加元素
addAll():将集合中的所有元素添加到HashSet中
clear():清空元素
contains():判断元素是否在HashSet中
remove():根据索引删除元素
size():返回HashSet大小
————————————————
②. TreeSet
TreeSet底层使用的是红黑树。
二. Map
Map是使用键值对存储的一种结构,有HashMap,TreeMap,Hashtable三种集合实现
Map集合的特点:
1.Map是一个双列集合,一个元素包含两个值(一个key,一个value)
2.Map集合中的元素,key和value的数据类型可以相同,也可以不同
3.Map中的元素,key不允许重复,value可以重复
4.Map里的key和value是一一对应的。
HashMap和Hashtable的区别:
1. HashMap
HashMap更适合查找、删除、插入。
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
HashMap 是无序的,即不会记录插入的顺序。
HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。
常用方法
————————————————
clear():清空HashMap
size():获取大小
put():添加键值对
putAll():将所有键值对添加到HashMap中
containKey():是否包含key
containValue():是否包含value
get():根据key获取value
keySet():获取key的集合
values():获取所有value
————————————————
2.TreeMap
TreeMap更适合遍历,最大的特点是遍历时是有顺序的,根据key的排序规则来
TreeMap是一个基于key有序的key value散列表。
map根据其键的自然顺序排序,或者根据map创建时提供的Comparator排序
不是线程安全的
key 不可以存入null
底层是基于红黑树实现的
3. Hashtable
Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射
Hashtable:底层也是哈希表,是同步的,是一个单线程结合,是线程安全的集合,速度慢
Hashtable:不能存储null键,null值