next

Java容器(List、Set、Map)知识点快速复习手册(中)

余生长醉 提交于 2020-12-09 10:35:04
前言 本文快速回顾了Java中容器的知识点,用作面试复习,事半功倍。 上篇:主要为容器概览,容器中用到的设计模式,List源码 中篇:Map源码 下篇:Set源码,容器总结 其它知识点复习手册 Java基础知识点面试手册(上) Java基础知识点面试手册(下) Java容器(List、Set、Map)知识点快速复习手册(上) HashMap http://wiki.jikexueyuan.com/project/java-collection/hashmap.html 源码分析: https://segmentfault.com/a/1190000014293372 关键词 初始容量16 扩容是2倍,加载因子0.75 头插法 0桶存放null 从 JDK 1.8 开始,一个桶存储的链表长度大于 8 时会将链表转换为红黑树(前提:键值对要超过64个) 自动地将传入的容量转换为2的幂次方 保证运算速度:确保用位运算代替模运算来计算桶下标。hash& (length-1)运算等价于对 length 取模。 hash均匀分布:数据在数组上分布就比较均匀,并且能够利用全部二进制位,也就是说碰撞的几率小, table数组+Entry []链表(散列表),红黑树 扩容操作需要把键值对重新插入新的 table 中,重新计算所有key有特殊机制(JDK1.8后) 存储结构

JDBC Api详解

陌路散爱 提交于 2020-12-08 08:34:25
一.什么是JDBC   JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。 二.数据库驱动   JDBC是对数据库操作的接口抽象,而不同数据库厂商的数据库驱动程序则对应JDBC接口实现,通过抽象出JDBC接口,应用程序和实际的数据库驱动即JDBC实现解耦。 三、常用接口 1.Driver接口   Driver接口由数据库厂家提供,作为java开发人员,只需要使用Driver接口就可以了。在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序,不同的数据库有不同的装载方法。如:   装载MySql驱动:Class.forName("com.mysql.jdbc.Driver");   装载Oracle驱动:Class.forName("oracle.jdbc.driver.OracleDriver"); 2.Connection接口   Connection与特定数据库的连接(会话),在连接上下文中执行sql语句并返回结果。DriverManager.getConnection(url, user, password

Assign the task HDU

烈酒焚心 提交于 2020-12-08 07:50:11
There is a company that has N employees(numbered from 1 to N),every employee in the company has a immediate boss (except for the leader of whole company).If you are the immediate boss of someone,that person is your subordinate, and all his subordinates are your subordinates as well. If you are nobody's boss, then you have no subordinates,the employee who has no immediate boss is the leader of whole company.So it means the N employees form a tree. The company usually assigns some tasks to some employees to finish.When a task is assigned to someone,He/She will assigned it to all his/her

Codeforces 838B

孤街浪徒 提交于 2020-12-08 07:49:37
题目链接: http://codeforces.com/problemset/problem/838/B You are given a directed weighted graph with n nodes and 2 n  - 2 edges. The nodes are labeled from 1 to n , while the edges are labeled from 1 to 2 n  - 2. The graph's edges can be split into two parts. The first n  - 1 edges will form a rooted spanning tree, with node 1 as the root. All these edges will point away from the root. The last n  - 1 edges will be from node i to node 1, for all 2 ≤  i  ≤  n . You are given q queries. There are two types of queries 1 i w : Change the weight of the i -th edge to w 2 u v : Print the length of the

dfs序线段树

匆匆过客 提交于 2020-12-08 07:26:57
dfs序+线段树,啥?如果在一棵树上,需要你修改一些节点和查询一些节点,如果直接dfs搜的话肯定超时,那用线段树?树结构不是区间啊,怎么用?用dfs序将树结构转化为一个区间,就能用线段树进行维护了。 dfs序是指:每个节点在dfs深度优先遍历中的进出栈的时间序列,记录每个点进栈和出栈的时间点,会发现每个点在栈中出现两次 比如下面这个图的dfs序: (转载来的图片,太懒不想画) 那么这样转化后我们就可以在上面进行线段树了。对于进栈时间点,我们记录为left[ u ],出栈时间点为right[ u ] 。对于这个区间,我们将每个节点标记为 1~len(dfs序长度) 以这个为区间1~len建线段树, 然后那棵树就没用了!,没用了! 对于修改一个节点x,就是修改left[x](但你的len是等于n的,或者你如果建的是两个节点都算的,你需要update左右编号),对于查询一个区间,就是查询left[x]~right[x],实际上就是线段树。 但是我在刚理解时候总会受原来那颗树的影响,实际上,可以这样理解,比如在这个dfs序中你要修改树节点1(原本的值都是1) ------------------------------> 附上一个例题 POJ 3321 There is an apple tree outside of kaka's house. Every autumn, a lot

Java基础整理(全是干货)

不问归期 提交于 2020-12-08 04:38:08
一.hashMap与hashTable与ConcurrentHashMap: 1.HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。不过它们都同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口。<Dictionary类是一个已经被废弃的类> 2.Hashtable既不支持Null key也不支持Null value。HashMap中,null可以作为键,这样的键只有一个,可以有一个或多个键所对应的值为null。 3.Hashtable是线程安全的,它的每个方法中都加入了Synchronize方法。在多线程并发的环境下,可以直接使用Hashtable,不需要自己为它的方法实现 同步,HashMap不是线程安全的,在多线程并发的环境下,可能会产生死锁等问题。如果想要线程安全的 HashMap,可以通过Collections类的静态方法synchronize dMap获得线程安全的HashMap。 <Map map = Collections.synchronizedMap(new HashMap())>; 4.hashMap的数据结构:HashMap的底层主要是基于数组和链表来实现的,它之所以有相当快的查询速度主要是因为它是通过计算散列码来决定存储的位置。 5

蓝桥杯——寒假作业

懵懂的女人 提交于 2020-12-08 04:27:03
题目地址 现在小学的数学题目也不是那么好玩的。 看看这个寒假作业: 每个方块代表1~13中的某一个数字,但不能重复。 比如: 6 + 7 = 13 9 - 8 = 1 3 * 4 = 12 10 / 2 = 5 以及: 7 + 6 = 13 9 - 8 = 1 3 * 4 = 12 10 / 2 = 5 就算两种解法。(加法,乘法交换律后算不同的方案) 你一共找到了多少种方案? 输出 请填写表示方案数目的整数。 【方法一】 用 stl 中的 next_permutation函数 ,全排列,然后判断是否符合情况,符合则++ #include<iostream> #include <ctime> #include <cmath> #include <bits/stdc++.h> using namespace std; bool f( int a[]){ if (a[ 0 ]+a[ 1 ]!=a[ 2 ]) return false ; if (a[ 3 ]-a[ 4 ]!=a[ 5 ]) return false ; if (a[ 6 ]*a[ 7 ]!=a[ 8 ]) return false ; if (a[ 9 ]!=a[ 10 ]*a[ 11 ]) return false ; return true ; } int main() { int a[ 13 ] = { 1 ,

剑指 Offer 24. 反转链表

喜欢而已 提交于 2020-12-07 23:02:07
题目描述 解题思路 对于列表翻转,我们可以用双指针进行记录,动态改变双指针的位置,从而获取翻转后的列表。 定义前后两个指针,前指针负责遍历列表,后指针负责改变节点指向 解题代码 public ListNode reverseList(ListNode head) { ListNode pre = head; ListNode cur = null; while (pre != null){ ListNode node = pre.next; pre.next = cur; cur = pre; pre = node; } return cur; } 来源: oschina 链接: https://my.oschina.net/jiansin/blog/4779986

Java编程思想 | 第8章 对象的容纳

懵懂的女人 提交于 2020-12-07 20:12:43
8.1 集合类 1、集合(Collection):一组单独的元素,通常应用了某种规则。在这里,一个List(列表)必须按特定的顺序容纳元素,而一个Set(集)不可包含任何重复的元素。 2、映射(Map):一系列"键 - 值"对。从表面看,这似乎应该成为一个"键 - 值"对的"集合",但假若视图按照那种方式实现它,就会发现实现过程相当笨拙。这进一步证明了应该分离成单独的概念。另一方面,可以方便地查看 Map 的某个部分。只需创建一个集合,然后用它表示那一部分即可。这样一来,Map 就可以返回自己键的一个Set、一个包含自己值的List 或者包含自己“键-值”对的一个List。和数组相似,Map 可方便扩充到多个“维”,毋需涉及任何新概念。只需简单地在一个Map 里包含其他 Map(后者又可以包含更多的Map,以此类推)。 虚线框代表“接口”,点线框代表“抽象”类,而实线框代表普通(实际)类。点线箭头表示一个特定的类准备实现一个接口(在抽象类的情况下,则是“部分”实现一个接口)。双线箭头表示一个类可生成箭头指向的那个类的对象。例如,任何集合都可以生成一个反复器(Iterator),而一个列表可以生成一个ListIterator(以及原始的反复器,因为列表是从集合继承的)。 8.1.1 使用 Collections boolean add(Object) *保证集合内包含了自变量

爬取笔趣阁小说

落爺英雄遲暮 提交于 2020-12-07 03:31:44
《修罗武神》是在 17K小说网 上连载的网络小说,作者为善良的蜜蜂。小说讲述了一个少年从下界二等门派外门弟子成长为上界翘楚人物的故事。该书曾入选“第三届橙瓜网络文学奖”百强作品。 编程只是实现目的的工具。 所以重点是分析我们的需求。 获取小说目录页面是基本。这里有各个章节的链接,标题等等内容。这是我们需要的。 有了各个章节的链接,就需要进入其中获得各个章节的内容。 1.首先是爬取网站的内容 1 def get_content(url): 2 3 try : 4 headers = { 5 ' User-Agent ' : ' Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36 ' , 6 } 7 8 r = requests.get(url=url, headers= headers) 9 r.encoding = ' utf-8 ' 10 content = r.text 11 return content 12 except : 13 s = sys.exc_info() 14 print ( " Error '%s' happened on line %d " % (s[1], s[2 ].tb_lineno)