Java数据结构
文章平均质量分 83
晴天的空间
这个作者很懒,什么都没留下…
展开
-
JDK中ArrayList的实现
JDK中ArrayList的实现ArrayList底层是一个Object数组,通过维护这个数组结构来改变ArrayList的结构。transient Object[] elementData;ArrayList实现比较简单,就是对数组进行操作,ArrayList定义了以下常量和实例变量。private final static int DEFAULT_CAPACITY = 10;//默认容量private final static Object[] EMPTY_ELEMENTDATA = {};原创 2021-12-23 11:29:28 · 141 阅读 · 0 评论 -
HashCode & HashMap扰动函数、初始化容量、负载因子、扩容元素拆分
HashCode & HashMap扰动函数、初始化容量、负载因子、扩容元素拆分1.HashCode为什么用31作为乘数?String.class的hashCode方法如下:public int hashCode() { int h = hash; if (h == 0 && value.lengt > 0) { char[] val = value; for (int i = 0; i < value.length;原创 2022-02-22 21:33:42 · 774 阅读 · 0 评论 -
ArrayList和LinkedList
Java中ArrayList和LinkedList的区别两者数据结构不同,ArrayList是基于数组实现、LinkedList是基于双向链表实现。从获取、删除、插入、内存开销这几个点来说明两者的区别。1、 获取:ArrayList的获取比LinkedList获取相比非常快,因为ArrayList的get方法的时间复杂度为O(1),而LinkList的为O(n)。ArrayList的get方法源码:public E get(int index) { rangeCheck(index);原创 2022-02-26 14:28:16 · 961 阅读 · 0 评论 -
双端队列ArrayDeque、LinkedList
双端队列ArrayDeque、LinkedList一、前言Stack栈:先进后出Queue队列:先进先出在Java里有一个Stack类,但是这个类已经不推荐使用了,而Queue是一个接口,当我们需要使用栈和队列时,推荐使用更加高效的ArrayDeque该类实现Deque接口,次选使用LinkedList。二、总体介绍要讲栈和队列,首先要讲Deque接口。Deque的含义是"double ended queue",即双端队列,既可以当栈使用,也可以当队列使用。下表列出Deque和Queue相对应原创 2022-02-26 18:59:18 · 829 阅读 · 0 评论 -
Jdk8-HashMap
一、HashMap插入HashMap插入的流程主要包括:计算下标、何时扩容、何时链表转红黑树等,具体如下:首先对key进行hash值的扰动,获取一个新的hash值。(key == null) ? 0 : h = key.hashCode() ^ (h >>> 16)判断tab是否为null或者长度为0,如果是则进行扩容操作。if ((tab == table) == null || (n = tab.length == 0)) n = (tab = resize())原创 2022-02-28 12:32:59 · 595 阅读 · 0 评论 -
Collections工具类使用、源码分析
Collcetions 工具类java.util.Collections 是java集合框架中的一个工具类,主要用于Collectiont提供的通用算法,比如:排序(sort)、二分查找(binarySearch)、洗牌(shuffle)、旋转(rotate)1. Collections.sort 排序方法使用,代码测试List<String> list = new ArrayList<String>();list.add("7");list.add("4");l原创 2022-03-01 20:27:56 · 619 阅读 · 0 评论