蓝桥杯可能会用到的容器(手打柠檬茶的brain + ChatGpt自学版)

HashSet

        在Java中,HashSet是一个实现了Set接口的类,它使用哈希表来存储元素,因此可以快速地执行添加、删除和查找操作。

        HashSet中的元素是不重复的,它会自动去除重复元素,这是因为HashSet内部是使用HashMap来实现的,其中键(key)存储的就是集合中的元素,而值(value)则是一个任意的常量对象。当我们向HashSet中添加一个元素时,实际上是将该元素作为键(key)添加到HashMap中,而值(value)则固定为一个特殊的常量对象。因此,当我们尝试向HashSet中添加重复的元素时,HashMap会检测到这个元素已经存在于键(key)中,就会放弃这个操作,从而保证HashSet中的元素是不重复的。

        HashSet具有快速查找元素的能力,它内部使用哈希表来存储元素,因此查找元素的速度非常快。但是,在进行遍历时,HashSet的元素是无序的,这是因为哈希表内部是按照哈希值来存储元素的,而哈希值是随机的,因此HashSet中的元素是没有顺序的。

        总之,HashSet是一个非常常用的集合类,它具有快速添加删除查找元素的能力,可以自动去除重复元素但是在遍历时元素是无序的

常用方法:

  1. add(E e):向集合中添加元素e,如果元素e已经存在于集合中,则添加失败。

  2. remove(Object o):从集合中删除元素o,如果集合中不包含元素o,则删除操作失败。

  3. contains(Object o):判断集合中是否包含元素o,如果包含返回true,否则返回false。

  4. size():返回集合中元素的数量。

  5. clear():清空集合中所有的元素。

  6. isEmpty():判断集合是否为空,如果为空返回true,否则返回false。

  7. iterator():返回一个迭代器,用于遍历集合中的元素。

  8. toArray():将集合中的元素以数组的形式返回。

需要注意的是,HashSet中的元素是无序的,因此在遍历时元素的顺序是不确定的。此外,HashSet内部使用哈希表来实现,因此添加、删除和查找元素的时间复杂度都为O(1),但是在遍历时性能较差。因此,在使用HashSet时,应该根据实际需求来选择合适的数据结构。


HashMap

        在Java中,HashMap是一种基于哈希表实现的Map接口,它允许我们存储键值对,并通过键来快速查找对应的值。

        HashMap中的键和值都可以为null,但是一个HashMap中最多只能有一个键为null的映射关系,因为HashMap中的键是唯一的。HashMap中的元素是无序的,这是因为HashMap内部是使用哈希表来存储元素的,哈希表内部的存储顺序是随机的。

        HashMap的基本操作包括添加元素、删除元素和查找元素,它们的时间复杂度都是O(1),因此HashMap非常适合用于存储大量的键值对,并需要快速地查找对应值的场景。

 常用方法:

  1. put(K key, V value):将键值对(key, value)添加到HashMap中,如果键已经存在,则更新其对应的值。

  2. remove(Object key):从HashMap中删除指定键所对应的键值对,如果键不存在,则删除操作失败。

  3. get(Object key):返回指定键所对应的值,如果键不存在,则返回null。

  4. containsKey(Object key):判断HashMap中是否包含指定的键,如果包含则返回true,否则返回false。

  5. containsValue(Object value):判断HashMap中是否包含指定的值,如果包含则返回true,否则返回false。

  6. keySet():返回HashMap中所有键的Set视图。

  7. values():返回HashMap中所有值的Collection视图。

  8. entrySet():返回HashMap中所有键值对的Set视图。

需要注意的是,在多线程环境下,HashMap是不安全的,因为它不是线程安全的,因此在多线程环境下使用时,需要对其进行同步处理。此外,在使用HashMap时,应该根据实际需求来选择合适的数据结构,因为HashMap的元素是无序的。

HashMap顺序读取:

import java.util.LinkedHashMap;
import java.util.Map;

public class LinkedHashMapDemo {
    public static void main(String[] args) {
        LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>(16, 0.75f, true);

        // 添加元素
        linkedHashMap.put("apple", 2);
        linkedHashMap.put("banana", 3);
        linkedHashMap.put("orange", 4);
        linkedHashMap.put("peach", 5);

        // 按照插入顺序遍历元素
        System.out.println("按照插入顺序遍历元素:");
        for (Map.Entry<String, Integer> entry : linkedHashMap.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }

        // 访问元素
        linkedHashMap.get("banana");
        linkedHashMap.get("apple");

        // 按照访问顺序遍历元素
        System.out.println("按照访问顺序遍历元素:");
        for (Map.Entry<String, Integer> entry : linkedHashMap.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

结果:

按照插入顺序遍历元素:
apple: 2
banana: 3
orange: 4
peach: 5
按照访问顺序遍历元素:
orange: 4
peach: 5
banana: 3
apple: 2

 LinkedList

        LinkedList是Java中的一个双向链表实现的集合类,实现了List、Deque和Queue等接口,它可以在任意位置高效地插入删除元素。

常用方法

  1. add(E e):在链表末尾添加元素。

  2. addFirst(E e):在链表头部插入元素。

  3. addLast(E e):在链表末尾添加元素,等价于add(E e)。

  4. remove():移除并返回链表的头节点。

  5. removeFirst():移除并返回链表的头节点,等价于remove()。

  6. removeLast():移除并返回链表的尾节点。

  7. clear():清空链表。

  8. get(int index):返回链表中指定位置的元素。

  9. set(int index, E element):将链表中指定位置的元素替换为新元素。

  10. size():返回链表中元素的个数。

  11. isEmpty():判断链表是否为空。

  12. contains(Object o):判断链表中是否包含指定元素。

  13. indexOf(Object o):返回链表中第一次出现指定元素的位置,如果链表中不包含该元素,则返回-1。

  14. lastIndexOf(Object o):返回链表中最后一次出现指定元素的位置,如果链表中不包含该元素,则返回-1。

  15. toArray():将链表转换为数组。

需要注意的是,由于LinkedList底层实现是一个双向链表,因此在随机访问元素时效率较低,通常建议在需要经常随机访问元素的情况下使用ArrayList,而在需要经常插入、删除元素的情况下使用LinkedList。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值