Java基础语法——03 -集合与迭代器

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个,链表就会转成红黑树

在这里插入图片描述

  1. 开始添加元素,先判断数组是否为空或者长度是否等于0,如果是则进行扩容,如果不是,就执行元素的hashCode方法计算出元素的hash值,这个hash值就是元素存放的位置,也就是元素的索引值

  2. 然后判断该位置上是否存在其他元素,如果存在,则使用equals方法判断他们之间本身的含义是否相等,如果相等则不添加,不等则做添加准备

  3. 然后判断该位置上的节点是否是数节点,如果是就说明这已经转变成红黑树结构,直接插入红黑树中,如果不是就插入链表中,然后判断该链表的长度是否大于等于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。存取元素有序

底层数据结构:哈希表结构(数组+双链表+红黑树)

1.2.4 properties

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值