HAOGRE's blog


  • 首页

  • 分类

  • 归档

  • 标签

  • 实验室

  • 关于

ArrayList-源码学习

发表于 2019-07-16 | 分类于 编程

ArrayList简介

  ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ensureCapacity操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。

它继承于 AbstractList,实现了 List, RandomAccess, Cloneable, java.io.Serializable 这些接口。

在我们学数据结构的时候就知道了线性表的顺序存储,插入删除元素的时间复杂度为O(n),求表长以及增加元素,取第 i 元素的时间复杂度为O(1)

  ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。

  ArrayList 实现了RandomAccess 接口, RandomAccess 是一个标志接口,表明实现这个这个接口的 List 集合是支持快速随机访问的。在 ArrayList 中,我们即可以通过元素的序号快速获取元素对象,这就是快速随机访问。

  ArrayList 实现了Cloneable 接口,即覆盖了函数 clone(),能被克隆。

  ArrayList 实现java.io.Serializable 接口,这意味着ArrayList支持序列化,能通过序列化去传输。

  和 Vector 不同,ArrayList 中的操作不是线程安全的!所以,建议在单线程中才使用 ArrayList,而在多线程中可以选择 Vector 或者 CopyOnWriteArrayList。

阅读全文 »

ArrayList-源码学习

发表于 2019-07-16 | 分类于 编程

ArrayList jdk 1.8 源码

阅读全文 »

HashMap-源码

发表于 2019-07-16 | 分类于 编程

HashMap jdk 1.8 源码

阅读全文 »

mysql-chapter1

发表于 2019-07-15 | 分类于 编程

什么是MySQL?

MySQL 是一种关系型数据库,在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展。阿里巴巴数据库系统也大量用到了 MySQL,因此它的稳定性是有保障的。MySQL是开放源代码的,因此任何人都可以在 GPL(General Public License) 的许可下下载并根据个性化的需要对其进行修改。MySQL的默认端口号是3306。

存储引擎

一些常用命令

查看MySQL提供的所有存储引擎

1
mysql> show engines;

查看MySQL提供的所有存储引擎

阅读全文 »

mysql-chapter2

发表于 2019-07-15 | 分类于 编程

基本操作

1
2
3
4
5
6
7
8
9
/* Windows服务 */
-- 启动MySQL
net start mysql
-- 创建Windows服务
sc create mysql binPath= mysqld_bin_path(注意:等号与值之间有空格)
/* 连接与断开服务器 */
mysql -h 地址 -P 端口 -u 用户名 -p 密码
SHOW PROCESSLIST -- 显示哪些线程正在运行
SHOW VARIABLES -- 显示系统变量信息
阅读全文 »

LinkedList-源码学习

发表于 2019-07-11 | 分类于 编程

简介

LinkedList是一个实现了List接口和Deque接口的双端链表。
LinkedList底层的链表结构使它支持高效的插入和删除操作,另外它实现了Deque接口,使得LinkedList类也具有队列的特性;
LinkedList不是线程安全的,如果想使LinkedList变成线程安全的,可以调用静态类Collections类中的synchronizedList方法:

1
List list=Collections.synchronizedList(new LinkedList(...));
阅读全文 »

Leetcode One

发表于 2019-07-11 | 分类于 编程

算法思想

贪心思想

贪心思想保证每次操作都是局部最优的,并且最后得到的结果是全局最优的。

分配饼干

455. Assign Cookies (Easy)

1
2
3
4
5
6
Input: [1,2], [1,2,3]
Output: 2

Explanation: You have 2 children and 3 cookies. The greed factors of 2 children are 1, 2.
You have 3 cookies and their sizes are big enough to gratify all of the children,
You need to output 2.

题目描述:每个孩子都有一个满足度,每个饼干都有一个大小,只有饼干的大小大于等于一个孩子的满足度,该孩子才会获得满足。求解最多可以获得满足的孩子数量。

因为最小的孩子最容易得到满足,因此先满足最小孩子。给一个孩子的饼干应当尽量小又能满足该孩子,这样大饼干就能拿来给满足度比较大的孩子。因此贪心策略

证明:假设在某次选择中,贪心策略选择给当前满足度最小的孩子分配第 m 个饼干,第 m 个饼干为可以满足该孩子的最小饼干。假设存在一种最优策略,给该孩子分配第 n 个饼干,并且 m < n。我们可以发现,经过这一轮分配,贪心策略分配后剩下的饼干一定有一个比最优策略来得大。因此在后续的分配中,贪心策略一定能满足更多的孩子。也就是说不存在比贪心策略更优的策略,即贪心策略就是最优策略。

阅读全文 »

Java-基础

发表于 2019-07-11 | 分类于 编程

一、数据类型

包装类型

八个基本类型:

  • boolean/1
  • byte/8
  • char/16
  • short/16
  • int/32
  • float/32
  • long/64
  • double/64
阅读全文 »

Java-容器

发表于 2019-07-11 | 分类于 编程

一、概览

容器主要包括 Collection 和 Map 两种,Collection 又包含了 List、Set 以及 Queue。

Collection


1. Set

  • HashSet:基于哈希实现,支持快速查找,但不支持有序性操作,例如根据一个范围查找元素的操作。并且失去了元素的插入顺序信息,也就是说使用 Iterator 遍历 HashSet 得到的结果是不确定的;

  • TreeSet:基于红黑树实现,支持有序性操作,但是查找效率不如 HashSet,HashSet 查找时间复杂度为 O(1),TreeSet 则为 O(logN);

阅读全文 »

Java 虚拟机

发表于 2019-07-11 | 分类于 编程

一、运行时数据区域


程序计数器

记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)。

虚拟机栈

每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。


可以通过 -Xss 这个虚拟机参数来指定一个程序的 Java 虚拟机栈内存大小:

阅读全文 »
<1…345…67>
HAOGRE

HAOGRE

a hexo blog

666 日志
44 分类
25 标签
© 2023 HAOGRE