- 博客(564)
- 资源 (4)
- 收藏
- 关注
原创 使用左连接和右连接代替全连接 3 (3 张表,值不唯一)(4张表)(统一结论)
在前两篇文章中,我们都是使用的 2 张表,如果是 3 张表,结论会不会变呢?我们来试一下。3. 3张表,值不唯一的情况。3.1 创建测试用表。DROP TABLE IF EXISTS table1;CREATE TABLE table1( column_1 NUMERIC);INSERT INTO table1VALUES (123);INSERT INT...
2019-12-05 16:32:29
495
原创 使用左连接和右连接代替全连接 2 (2 张表,值不唯一)
在上篇文章中,我们的测试用表,没一行都是唯一的,也就是没有重复值,如果有重复值,结论会不会变呢?2. 2 张表,值不唯的情况。2.1 创建测试用表。DROP TABLE IF EXISTS table1;DROP TABLE IF EXISTS table2;CREATE TABLE table1( column_1 NUMERIC);INSERT ...
2019-12-05 14:43:04
409
原创 使用左连接和右连接代替全连接 1 (2 张表,值唯一)
MySQL 不支持 FULL OUTER JOIN,如果需要使用 FULL OUTER JOIN,可以使用 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 来模拟。这篇文章研究怎样使用 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 代替 FULL OUTER JOIN。 因为 PostgreSQL 支持 FULL OUTER JOIN...
2019-12-04 17:27:05
467
原创 MySQL 和 PostgreSQL 字符串类型比较
1. MySQL: 1.1 CHAR(n) 1.1. 存储固定长度(n)的字符串。n 范围是 [0, 255]。n 的缺省值为 1. 1.2. 当插入的字符串长度小于 n 时,MySQL 会在末尾补充空格。查询的时候,MySQL 会删除末尾的空格(不会删除头部空格)。 1.3. MySQL 在处理 >、 >=、 <、...
2019-10-18 19:33:52
2081
原创 ConcurrentHashMap
ConcurrentHashMap 在功能上与 HashTable 一致,都是线程安全的键值对容器。但是 ConcurrentHashMap比 HashTable 有更好的并发性能:1. HashTable 是同步的,也就是说,它的所有方法都是被 synchronized 修饰的。所以当 thread-1 进入put 方法时,其它所有线程都不能进入put/get 方法。这样做可以确保线程...
2019-10-16 19:29:07
138
原创 Collections.synchronizedXxx
先来看一下集合类: 表 1 . Java Collection Implementations以上 10 个Java 集合的实现类搜不是同步的。(类/成员函数/代码块 没有使用 synchronized 修饰)可以通过Collections.synchronizedXxx 来把他们变成同步的。比如...
2019-10-12 19:06:40
1062
原创 LinkedHashMap
LinkedHashMap 继承自 HashMap,与HashMap 相比,增加了一个功能:每个节点使用双向链表链接起来,这样就能保证节点的遍历顺序与插入顺序一致。这是 HashMap 的节点: static class Node<K,V> implements Map.Entry<K,V> { final int hash; ...
2019-10-12 18:36:55
164
原创 TreeMap
TreeMap 通过红黑树实现,一般的读写操作都是 log(n) 的时间复杂度: containsKey,get,put,remove。来看一下 put 函数的源码: public V put(K key, V value) { Entry<K,V> t = root; if (t == null) { c...
2019-10-12 18:03:52
148
原创 NavigableMap
1. NavigableMap 继承自 SortedMap,所以它的元素是有序的。2. 在 SortedMap 基础上,支持快速搜索符合条件的最近的元素。这里条件主要是指lower(>),floor(>=),ceiling(<),higher(>)。3. 支持逆序访问。descendingKeySet /descendingMap。4. 支持获取子集合...
2019-10-12 15:20:25
2955
原创 RandomAccess
RandomAccess 只是一个标记,继承这个接口的类,支持快速随机访问(时间复杂度为O(1))。一些通用算法,可以根据这个接口,知道相应的类支持随机访问还是顺序访问,根据这个信息来提升算法的性能。参考链接:1.https://docs.oracle.com/javase/8/docs/api/java/util/RandomAccess.html...
2019-10-12 14:47:41
336
原创 NavigableSet
NavigableSet 继承自 SortedSet,相比于 SortedSet,NavigableSet 多了以下几类功能:1. 直接获取符合条件的最近的元素,这里,条件主要是 lower(>)、 floor(>=)、 higher(<)、 ceiling(<=)。如果符合条件的元素不存在,就返回 null。2. 逆向访问:descendingSet,descen...
2019-10-12 12:34:43
550
原创 HashMap
我们通过查看 put 方法的源码,来比较 HashMap 和 HashTable 的区别: public V put(K key, V value) { return putVal(hash(key), key, value, false, true); // value 可以为 null } static final int hash(Object k...
2019-09-30 18:13:39
178
原创 HashTable
Map 接口中,key 和 value 都可以为 null。HashTable 实现中,key 和 value 都不允许为 null。我们看一下它添加元素的方法: public synchronized V put(K key, V value) { if (value == null) { // value 不能为 null throw...
2019-09-30 17:47:26
160
原创 Map
Map 没有继承 Collection,因为 Map 是键值对的集合,而 Collection 仅仅是值的集合。Map 要求键必须唯一。Map 的主要实现有:HashTable,HashMap,LinkedHashMap,IdentityHashMap,WeakHaspMap。参考链接:1.https://docs.oracle.com/javase/8/docs/api/...
2019-09-30 17:07:27
127
原创 TreeSet
HashSet 是通过 HashMap 实现的。LinkedSet 是通过 LinkedHaspMap 实现的。果然,TreeSet 是通过 TreeMap 来实现的。我们来看一下 TreeSet 的 add 方法的实现: public boolean add(E e) { return m.put(e, PRESENT)==null; } ...
2019-09-30 16:35:40
151
原创 SortedSet
SortedSet 是一个接口,它继承自 Set。比 Set 多的功能是,它保证元素按照大小排序。因为这个特点,所有它有 first(), last() 这样的成员函数。需要区分的是,LinkedHashSet 保证元素的顺序,是保证插入顺序与遍历顺序一只。而SortedSet 保证的顺序是指遍历顺序始终是按照从小到大排序。当然了,也可以自定义比较函数,让它按照从大到小排序。参考链接...
2019-09-30 16:07:29
716
原创 LinkedHashSet
继承自 HashSet,不过比 HashSet 多的功能是它维护了一份双向链表,来将它所有的元素连接起来。遍历的顺序与插入的顺序是一致的。HashSet 不能保证这样的一致性。看 LinkedHashSet 的源码,发现 LinkedHashSet 没有自己的方法,只有一些构造方法: public LinkedHashSet(int initialCapacity, float l...
2019-09-30 15:49:58
168
原创 HashSet
HashSet,顾名思义,我们可以得到两点信息:1. 实现了 Set 接口。2. 通过 Hash 表实现。所以它的 element 是无序的。下面看一下 add 方法的源码: public boolean add(E e) { return map.put(e, PRESENT)==null; } private transient Hash...
2019-09-30 15:18:29
132
原创 Set
Set 是一个没有重复元素的集合,允许 null 作为 element。它继承自 Collection 接口,与 Collection 接口相比,几乎没有添加新的函数。因为它只表示一个集合,不需要向 List 一样支持随机访问(get, set),也不需要像 Queue 一样支持队头/队尾部的插入/删除/读取。参考链接:1.https://docs.oracle.com/javas...
2019-09-30 11:48:02
113
原创 ArrayDeque
从名字就能看出来:1. 实现了 Deque 接口。支持头部/尾部的插入/删除/读取操作。2. 使用数组实现,如果容量不够,会自动扩容。下面我们以 add 函数为入口,看一下源码: public boolean add(E e) { addLast(e); return true; } public void addLast(E...
2019-09-30 11:38:25
384
原创 Deque
Deque 是 ”double ended queue“ 的缩写,通常发音是 ”deck“。顾名思义,就是在队头或者队尾都可以插入或者删除。而 Queue 只能在队列尾部插入,在队列头部获取。与 Queue 一样,它的插入/删除/获取都有两个版本:1. 操作失败时抛出异常。2. 操作失败时返回 null 或者 false.与 Queue 一样,这个借口不提供按照下标访问: get(...
2019-09-30 11:05:00
158
原创 PriorityQueue
PriorityQueue 基于小根堆,如果需要大根堆,就在构造函数里面自定义 Comparator。因为 PriorityQueue 必须支持比较运算,所以不能为 null。PriorityQueue 不是线程安全的,如果需要在多线程下使用,应该使用 PriorityBlockingQueue。看一下PriorityQueue 的 add 方法: public boo...
2019-09-29 18:40:15
340
原创 Queue
Queue,队列,通常支持 FIFO(first-in-first-ou)操作。直接写总结:1. 它所支持的插入/删除/获取操作都有两个版本,分别对应操作失败的两种策略: 1.1. 抛出异常。 1.2.返回 null 或者 false.3. Queue 的操作不支持阻塞,如果需要支持阻塞,需要使用 BlockingQueue, BlockingQueue 是...
2019-09-29 18:21:13
203
原创 Stack
Stack 继承自 Vector, 的 push 方法如下: public E push(E item) { addElement(item); return item; } public synchronized void addElement(E obj) { modCount++; ensureCa...
2019-09-29 17:48:37
126
原创 Vector
和 ArrayList 一样,是通过数组实现的 List, 与 ArrayList 不同的是,Vector 是同步的。比如下面这段代码: public void add(int index, E element) { insertElementAt(element, index); } public synchronized void insertEl...
2019-09-29 17:38:44
103
原创 LinkedList
LinkedList 是 List 的另一种实现:通过双向链表来实现的。与 ArrayList 一样,它的方法也不是同步的,可能会抛出ConcurrentModificationException 。如果有多个 thread 需要写同一个 LinkedList,最好在创建它的时候就创建一个同步版本:List list = Collections.synchronizedList(new L...
2019-09-29 17:14:32
103
原创 ArrayList
这是一个可改变 size 的,通过数组实现的 List。它的很多方法都是 O(1) 的时间复杂度,比如size, isEmpty, get, set, iterator,listIterator。add 方法的平摊复杂度也是 O(1),也就是说,调用 n 次的复杂读为 O(n).看一下源码就能明白很多: public boolean add(E e) { ...
2019-09-29 16:57:34
96
原创 List
List 是有序集合,允许重复的值,也允许多个 null 存在。List 比 Collection 多的方法:1. index 相关:get, set,indexOf, lastIndexOf.2. 排序: sort.参考链接:1.https://docs.oracle.com/javase/8/docs/api/java/util/List.html...
2019-09-29 16:24:04
95
原创 Collection
Collection 接口是 Java 集合框架的根接口。Jdk 没有类直接继承这个j接口,而是继承它的子借口,比如 List, Set, Queue.主要方法:1. 添加元素: add, addAll.2. 删除元素: clear, remove, removeAll, removeIf, retainAll.3. 获取 size :isEmpty, size.4. 转换成 ...
2019-09-29 16:15:04
105
原创 Iterable
Iterable 接口是 Collection 的父接口,实现了这个接口的 Class 可以用在 for-each 循环当中。Iterable 借口主要定义了 3 个方法:1.iteratorIterator<T> iterator();返回集合的迭代器。2.forEach default void forEach(Consumer<? s...
2019-09-29 15:44:27
260
原创 Java 集合框架一 :java.util包
这个专栏整理一下 Java 语言的集合框架。仅包含 java.util 包下面的类。java.util.concurrency 将用另一个专栏来写。Java 版本:Java 8Java 集合的整体框图如下:后面几篇文章做打算做几件事情:1. 列举每个 Interface 的主要方法。2. 列举实现每个 Interface 的 Class,看这些 Class 的...
2019-09-29 15:22:05
206
原创 华为机试题 凸包
输入:13;-3,-3;1,3;2,-4;6,1;-2,-2;4,5;1,-2;1,4;-2,3;-4,1;-1,1;2,2;1,-1输出:-4, 1-2, 34, 56, 12, -4-3, -3#include#include#include#include#include#include#include#include
2015-08-18 19:37:16
807
原创 华为机试题 好友关系管理
好友关系管理描述:现有一个社交网站,其好友推荐策略为:用户A和用户B不是好友,当二人的共同好友数量超过好友推荐阈值m时,就向A和B分别推荐为彼此好友。 本题任务为:对设定的m值,给定一组用户及各自好友列表,对这一组用户,反复自动应用上述好友推荐策略后(假设每次推荐都被采纳),求指定用户的最终好友列表。 注:好友关系是双向的,即:如果用户A是用户B的好友,
2015-08-17 20:45:32
1703
原创 计蒜客 难题题库 224 判断奇偶
65次 23.0% 1000ms 65536KBessie那惨无人道的二年级老师搞了一个有 N (1 输入格式:第一行: 一个单独的整数: N * 第2到第N+1行: 第j+1行有第j个需要判断奇偶性的整数。输出格式:第1..N行: 第j行根据第j个整数的奇偶性输出一个单词" even" 或者" odd"1024可以被2整除; 而5931不可以。样例1输入:
2015-08-11 09:20:59
1102
原创 计蒜客 难题题库 223 字母排序
49次 14.2% 1000ms 65536K XXXX年突然有外星人造访,但大家语言不通,不过科学家们经过研究发现外星人用26个英文字母组成的单词中最长不降子序列的长度来表述数字,且英文字母的排列顺序不同,现给出其排列顺序,再给出外星人说的每个数字(其实是每个英文单词,用空格隔开),翻译出外星人所说的数字(连续输出,最后加回车)。 (因为是最长不降子序列,所以数字中没有0,
2015-08-11 09:19:28
2481
原创 计蒜客 难题题库 222 疲倦程度
27次 3.70% 1000ms 65536K奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息。若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0)。若她在第i分钟休息,则疲倦程度减少1。无论何时,疲倦程度都不能超过M。另外,一旦她开始休息,只有当疲惫程度减为0时才能重新开始跑步。在第N分钟后,她的疲倦程度必须为0。输入格式:第一行,两个整数
2015-08-11 09:17:49
606
原创 计蒜客 难题题库 221 N的-2进制表示
36次 13.8% 1000ms 65536K对于十进制整数N,试求其-2进制表示。 例如,因为 1*1 + 1*-2 + 1*4 + 0*-8 +1*16 + 1*-32 = -13 ,所以(-13)_10 = (110111)_-2。输入一个整数,代表要转换的十进制数。输出一个整数,代表N的-2进制表示。|N| 样例
2015-08-11 09:16:41
1063
原创 计蒜客 难题题库 220 线段的总长
22次 22.7% 1000ms 65536K数轴上有N个点,任意两点连线得到n(n-1)条线段,试求线段的总长。输入格式:第一行,一个整数N,表示点数。 接下来N行,每行一个整数X_i,表示点的坐标。输出格式:输出为一个整数,表示线段的总长。N 样例1输入:515324输出:40
2015-08-11 09:15:58
951
原创 计蒜客 难题题库 219 最大质因数
52次 13.4% 1000ms 65536K给出N个数字,试求质因数最大的数字。输入格式:第一行,一个整数N,表示数字个数。 接下来N行,每行一个整数A_i,表示给出的数字。输出格式:一个整数,表示质因数最大的数字。N 举例 38和1238=19*2, 12=2*3*3, 38最大的是19 12最大的是3, 所以本数据要输出38。样
2015-08-11 09:14:35
1551
原创 计蒜客 难题题库 218 配对元素
15次 53.3% 1000ms 65536K给出2个序列A={a[1],a[2],…,a[n]},B={b[1],b[2],…,b[n]},从A、B中各选出n个元素进行一一配对(可以不按照原来在序列中的顺序),并使得所有配对元素差的绝对值之和最大。输入格式:输入的第1行为1个整数n 第2行包含n个整数,题目中的A序列。 第3行包含n个整数,题目中的B序列。 输
2015-08-10 10:16:07
872
HMR3000获取三轴数据
2014-07-05
C8051F120倍频函数
2014-07-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人