Java中的容器
文章目录
一、集合
1.1 List
ArrayList
LinkedList
public void addFirst(E e):将指定元素插入此列表的开头。
public void addLast(E e):将指定元素添加到此列表的结尾。
public E getFirst():返回此列表的第一个元素。
public E getLast() :返回此列表的最后一个元素。
public E removeFirst():移除并返回此列表的第一个元素。
public E removeLast():移除并返回此列表的最后一个元素。
public E pop():从此列表所表示的堆栈处弹出一个元素。
public void push(E e):将元素推入此列表所表示的堆栈。
public boolean isEmpty() :如果列表不包含元素,则返回true
Vector
1.2 Set
1.2.1 HashSet
底层原理
HashSet集合使用的是HashMap,而HashMap的底层数据结构是hash表,也就是数组加链表,jdk1.8之后添加了红黑树结构,也就是数组加链表加红黑树
链表的阈值是8,也就是说如果数组的长度达到了64并且链表的个数达到了8个,链表就会转成红黑树
-
开始添加元素,先判断数组是否为空或者长度是否等于0,如果是则进行扩容,如果不是,就执行元素的hashCode方法计算出元素的hash值,这个hash值就是元素存放的位置,也就是元素的索引值
-
然后判断该位置上是否存在其他元素,如果存在,则使用equals方法判断他们之间本身的含义是否相等,如果相等则不添加,不等则做添加准备
-
然后判断该位置上的节点是否是数节点,如果是就说明这已经转变成红黑树结构,直接插入红黑树中,如果不是就插入链表中,然后判断该链表的长度是否大于等于8,如果满足条件就转换成红黑树
结论:HashSet是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存储和查找性能。保证元素唯一性的方式依赖于:hashCode和equals这两个方法。
1.2.2 LinkedHashSet
LinkedHashSet是HashSet的一个子类,用法一致。
底层采用的数据结构是数组+双向链表+红黑树
HashMap与LinkedHashMap的区别?
HashMap的遍历顺序与存放顺序无关
LinkedHashMap的遍历顺序与存放顺序一致
结论:HashMap的特点是无序且不重复;LinkedHashMap的特点是有序且不重复
1.3 Map
1.3.1 介绍
Map是一种双列集合,以键值对的形式存储数据,一个键对应一个值,这种对应关系称之为映射。
<key,value>
在一个map集合中,key是唯一的数据,也就表示key是不能重复的;value不唯一,也就表value是可以重复的
Map常用类结构图
1.3.2 HashMap
描述
特点:存放数据以键值对形式,键不能重复,值可以重复,且键和值都可以为null。存取元素无序
底层数据结构:哈希表结构(数组+单链表+红黑树)
常用方法
-
public V put(K key, V value)
- 把指定的键与指定的值添加到Map集合中。 put即是添加也是修改
-
public V remove(Object key)
- 把指定的键所对应的键值对元素在Map集合中删除,返回被删除元素的值。
-
public V get(Object key)
- 根据指定的键,在Map集合中获取对应的值。
-
public Set keySet()
- 获取Map集合中所有的键,存储到Set集合中。 获取键集 遍历方式一
-
public Set<Map.Entry<K,V>> entrySet()
- 获取到Map集合中所有的键值对对象的集合(Set集合)。 遍历方式二
方法使用
public class Demo01 {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("一更天","19:00");
map.put("二更天","21:00");
map.put("三更天","23:00");
map.put("四更天","01:00");
map.put("五更天","03:00");
map.put(null,null);
System.out.println(map);
map.remove("五更天");
System.out.println(map.get("一更天"));
Set<String> strings = map.keySet();
System.out.println(strings);
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) {
System.out.println(entry);
}
}
}
//控制台结果
{null=null, 二更天=21:00, 四更天=01:00, 一更天=19:00, 五更天=03:00, 三更天=23:00}
19:00
[null, 二更天, 四更天, 一更天, 三更天]
null=null
二更天=21:00
四更天=01:00
一更天=19:00
三更天=23:00
Process finished with exit code 0
1.2.3 LinkedHashMap
描述
特点:存放数据以键值对形式,键不能重复,值可以重复,且键和值都可以为null。存取元素有序
底层数据结构:哈希表结构(数组+双链表+红黑树)