0
点赞
收藏
分享

微信扫一扫

TensorFlow深度学习框架改进K-means聚类、SOM自组织映射算法及上海招生政策影响分析研究...

开源分享 2024-09-13 阅读 2
java

这里写目录标题


!!!本文是基于javaGuide的学习和自我总结!!!

Collection 接口

List 接口

在这里插入图片描述

ArrayList 简述
public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable{...}

1. ArrayList 和 LinkedList 区别?⭐️⭐️⭐️⭐️

  • 是否线程安全
  • 底层数据结构
  • 插入和删除是否受元素位置的影响
  • 是否支持快速随机访问
  • 内存空间占用

2. ArrayList 和 Array 的区别?⭐️⭐️⭐️

  • Array
  • ArrayList
    ArrayList<Integer> list = new ArrayList();

ArrayList 和 Vector 区别?⭐️⭐️

ArrayList 的扩容机制?⭐️⭐️⭐️

ArrayList的扩容机制的核心其实是grow()方法

/**
 * 要分配的最大数组大小
 */
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

/**
 * ArrayList扩容的核心方法。
 */
private void grow(int minCapacity) {
    // oldCapacity为旧容量,newCapacity为新容量
    int oldCapacity = elementData.length;
    // 将oldCapacity 右移一位,其效果相当于oldCapacity /2,
    // 我们知道位运算的速度远远快于整除运算,整句运算式的结果就是将新容量更新为旧容量的1.5倍,
    int newCapacity = oldCapacity + (oldCapacity >> 1);

    // 然后检查新容量是否大于最小需要容量,若还是小于最小需要容量,那么就把最小需要容量当作数组的新容量,
    if (newCapacity - minCapacity < 0)
        newCapacity = minCapacity;

    // 如果新容量大于 MAX_ARRAY_SIZE,进入(执行) `hugeCapacity()` 方法来比较 minCapacity 和 MAX_ARRAY_SIZE,
    // 如果minCapacity大于最大容量,则新容量则为`Integer.MAX_VALUE`,否则,新容量大小则为 MAX_ARRAY_SIZE 即为 `Integer.MAX_VALUE - 8`。
    if (newCapacity - MAX_ARRAY_SIZE > 0)
        newCapacity = hugeCapacity(minCapacity);

    // minCapacity is usually close to size, so this is a win:
    elementData = Arrays.copyOf(elementData, newCapacity);
}

Queue 接口

在这里插入图片描述

1. Queue和Deque的区别?⭐️⭐️⭐️

主要区别就是

本质上

2. ArrayDeque与LinkedList区别?⭐️⭐️⭐️

ArrayDeque和LinkedList都继承了Deque,两者有什么不同吗?

图片 from javaGuide
在这里插入图片描述

3. PriorityQueue有什么特点?⭐️⭐️⭐️

PriorityQueue会出现在手撕算法应用当中 --》堆排序、第K大的数、带权图的遍历等

Set 接口

Map 接口

在这里插入图片描述

简述HashMap

  • Map里面存放的是KV对,且Key值不可重复(这一点很重要,事关HashSet为啥不可重复,因为HashSet直接把值存到Key上了,Value则赋值为一个虚拟的Object对象)
  • 这篇文章很详细,不过比较老了:深入Java集合学习系列:HashMap的实现原理

(1)HashMap查询、删除的时间复杂度⭐️⭐️⭐️⭐️

  • 如果没有元素
  • 如果有元素(链表)
  • 红黑树

(2)HashMap的底层实现⭐️⭐️⭐️⭐️⭐️

1. HashMap和HashTable的区别

注 : HashTable基本被淘汰了

  • 线程安全
  • 效率
  • 对Null key和Null value的支持
  • 其他区别可以从上面写的HashMap来说(HashTable几乎不用了)

2. HashMap和HashSet区别⭐️⭐️⭐️⭐️

HashSet<Object> objects = new HashSet();
HashMap<Object, Object> objectObjectHashMap = new HashMap();
  • 区别:

// HashSet部分源码

public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, java.io.Serializable
{
    static final long serialVersionUID = -5024744406713321676L;

    private transient HashMap<E,Object> map;

    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();

    /**
     * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has
     * default initial capacity (16) and load factor (0.75).
     */
    public HashSet() {
        map = new HashMap<>();
    }
    ...
    // 这里,调用了map的put方法,把e存到key上---》不能重复
    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
}

3. HashMap和TreeMap的区别?⭐️⭐️⭐️⭐️

//HashMap

public class HashMap<K,V> extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable {

//TreeMap

public class TreeMap<K,V>
    extends AbstractMap<K,V>
    implements NavigableMap<K,V>, Cloneable, java.io.Serializable
  • TreeMap实现了NavigableMap接口
  • TreeMap实现了SortedMap接口

4. CocurrentHashMap线程安全的具体实现方式/底层具体实现⭐️⭐️⭐️⭐️

分两个阶段——jdk1.8之前;1.8及以后

  • jdk1.8以前
    在这里插入图片描述
  • jdk1.8及以后
    在这里插入图片描述
    在这里插入图片描述
举报

相关推荐

0 条评论