FengZH的博客

  • 首页

  • 标签

  • 分类

  • 归档

Dijkstra(迪杰斯特拉)算法的 java 实现

发表于 2020-03-06 | 分类于 算法

迪杰斯特拉算法解决的问题是:

在一个有向图中,求图中一个节点到其他所有节点的最短距离

阅读全文 »

ReentrantLock 源码分析

发表于 2020-02-12 | 分类于 Java

前言

本文主要分析 ReentrantLock 是如何实现非公平锁和公平锁的

源码版本为 jdk1.8

阅读全文 »

String 的 intern 方法分析

发表于 2020-02-08 | 分类于 Java

分析这几种情况(jdk 1.8):

情况一:

1
2
3
4
5
6
String str1 = new String("hel") + new String("lo"); 
// 并没有在常量池里创建 "hello"
String str2 = new String("ja") + new String("va");
// 虽然这条语句没有在常量池创建 "java",但常量池之前已经存在 "java"
System.out.println(str1.intern() == str1);
System.out.println(str2.intern() == str2);

阅读全文 »

FReader,一款 Android 小说阅读器实现,支持阅读网络、本地 TXT、本地 EPUB 小说

发表于 2020-01-04 | 更新于 2020-01-05 | 分类于 Android

主要功能

  • 支持搜索、阅读网络小说
  • 可通过分类查找网络小说
  • 支持导入并阅读本地 TXT,本地 EPUB 小说
  • 在书架上显示之前阅读过的小说,并且保存了上一次的阅读进度
  • 阅读界面可自定义屏幕亮度、字体大小、行距、背景颜色等
  • 实现仿真翻页动画效果
阅读全文 »

ArrayMap 源码分析

发表于 2019-12-19 | 分类于 Android

概述

ArrayMap 是 Android 的 API,它和 Java 的 HashMap 相比,虽然在查找效率上不如 HashMap(HashMap 查找的时间复杂度是 O(1), ArrayMap 查找的时间复杂度是 O(logn)),但是 ArrayMap 的空间消耗更小,它内部使用数组存储 hash 和键值对,不用花费多余的指针维护链表或树结构,扩容的时候只扩容 1.5 倍,并且元素小于一定量后还会收缩数组来回收空间。所以在数据量不大并且需要节省空间的时候可以考虑 ArrayMap。

下面就从源码的角度看下 ArrayMap 的实现原理,主要看它的增删查方法。

阅读全文 »

ConcurrentHashMap 源码分析(1.8)

发表于 2019-12-16 | 分类于 Java

概述

ConcurrentHashMap 是一个加强版的 HashMap,它支持并发操作。比起 HashTable 直接锁住整个数组,ConcurrentHashMap 锁的粒度更细,锁的是单个数组元素,而且有些操作例如初始化,对数组元素赋值等使用的是 CAS 方法。并且在扩容的时候支持并发扩容,速度更快。

下面就来看下 ConcurrentHashMap 的源码,主要分析它的初始化、扩容、put、get 操作及相关延伸。

阅读全文 »

LinkedList 源码分析

发表于 2019-12-04 | 分类于 Java

概述

LinkedList 底层的实现是双向链表,因而它改查的效率较低,而在增删方面,由于不用进行数据的整体移动,所以在中间进行增删时具有较高的效率。

下面就从源码入手,对 LinkedList 的增删改查作进一步的了解。

阅读全文 »

Android 连接 MySQL 并进行基本的增删改查操作

发表于 2019-11-25 | 分类于 Android

准备工作

导入 jar 包

  1. 下载 mysql-connector-java 包(吃过亏的表示推荐 5.x.x 版本,8.x.x 版本会出现挺多问题的):mysql-connector-java 下载地址
阅读全文 »

选择排序及其优化

发表于 2019-11-18 | 分类于 算法

一般的选择排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void selectionSort(int[] a) {
int minIndex; // 记录每一轮的最小值索引
for (int i = 0; i < a.length - 1; i++) {
// 选出最小值赋给 a[i],a[i] 前面的数都已排好序
minIndex = i;
for (int j = i+1; j < a.length; j++) {
if (a[j] < a[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
swap(a, i, minIndex);
}
}
}
阅读全文 »

冒泡排序及其优化(三种优化)

发表于 2019-11-17 | 分类于 算法

普通的冒泡排序

1
2
3
4
5
6
7
8
9
public void bubbleSort(int[] a) {
for (int i = 0; i < a.length - 1; i++) { // 外层控制循环次数
for (int j = 0; j < a.length - i - 1; j++) { // 内层保证 a[n-i-1] 是最大的
if (a[j] > a[j+1]) {
swap(a, j, j+1);
}
}
}
}
阅读全文 »
12…9
FengZH

FengZH

阳光总在风雨后!坚持就是胜利!
82 日志
6 分类
33 标签
GitHub E-Mail
© 2019 – 2020 FengZH
|
0%