对比Hashtable、HashMap、TreeMap有什么不同?
Map容器Map 通常被包括在 Java 集合框架中,但是其本身并不是真正的 Collection 集合类型。 Hashtable 、 HashMap 、 TreeMap 都是 Map 的实现,是以键值对的形式存储和操作数据的容器类型。
![Java Map](https://raw.githubusercontent.com/wqdchn/blog-image/master/java-hashtable-hashmap-treemap/Java Map.png)
Hashtable 继承自 Dictionary 类,而 HashMap 与 TreeMap 继承 AbstractMap 类,它们的类结构上是不同的,不同的实现表明了它们不同的设计目的。
Hashtable 是 Java 类库关于哈希表的一个早期实现,它的方法都使用 synchronized 进行同步,是线程安全的。 Hashtable 不允许 key 为 null ,不允许 value 为 null 。
HashMap 是使用最广的一种哈希表实现,大部分方法与 Hashtable 是相似的,但是减少了同 ...
对比Vector、ArrayList、LinkedList有何区别?
Java的集合框架 Java 提供的主要容器类型分别是集合框架与 Map ,集合通常是指 Collection 接口下的 List 、 Set 、 Queue 三类集合。一般认为 Collection 接口是 Java 集合框架的根,其子集构成了集合框架。 Map 并不属于 Collection 接口的子集,但是在概念是也当做集合来使用,但是它本身并不是真正的集合。注意,所有集合中都不能存放基础数据类型,只能存放对象的引用。
![Java Collection](https://raw.githubusercontent.com/wqdchn/blog-image/master/java-vector-arraylist-linkedlist/Java Collection.png)
List集合 Vector 、 ArrayList 、 LinkedList 是 List 的实现,都是有序集合。它们都提供了诸如随机访问、添加、删除等常用操作,以及迭代器遍历、排序等方法,在功能上较为相近。但是其具体的设计存在一定区别,因此在性能、线程安全等方面有所不同。
常用方法:
size() ...
R语言新手教程:我在哪,我的数据在哪
R语言与RStudio我知道新手那种对未知的知识,陌生的工具的恐惧和焦虑,一些对于老手来说就是几条命令行,几条代码的事,对于新手来说可能要摸索好几天才能找到头绪。虽说都有这么一个过程,但是能够尽快走过这个阶段总是好的。
今天我在一个R语言的群里看到一个新手同学为一个很简单的问题而困恼,不禁想起了我刚接触R语言的时候。不过我本身是计算机专业的学生,可能比较容易学习新的工具。但是对很多非计算机专业的学生来说,学习R语言可能是一件不那么容易的事。
R语言自带了一个GUI,也就是编程时的用户界面了,不过它的风格非常朴素,功能也很朴素,不太适合作为新手上手的工具。因此,我强烈建议使用RStudio,这里并不介绍RStudio的安装、启动,以及RStudio面板上各个窗口表示的内容。相信知乎、简书等网站上有很多详细的中文教程。
那么这篇文章要介绍什么东西呢?
很简单,就是如何在RStudio命令窗口中使用R语言,命令它告诉我,我在哪。
我在哪,我的数据在哪我执行了读取文件的命令,但是却显示错误,请问是怎么回事啊???
这是我在群里最容易看到的一个问题。一看新手同学贴出来的R代码可能类似这样:
...
LeetCode股票买卖系列
Best Time to Buy and Sell Stock来看LeetCode的股票买卖系列问题的第一题Best Time to Buy and Sell Stock。这一题要求在一系列股票价格中,通过一次买卖交易获得最大的收益。假设有这么一组股票价格[7,1,5,3,6,4],我们只能在买进之后再卖出来赚取收益。很显然,我们需要在第二天的时候以1元的价格买进,然后在第五天的时候以6元的价格卖出,这样得到最大的收益5元。这可以用暴力法通过两层for循环遍历实现,但是还有一个比较好的办法,更加贴近人的思维。
首先,我们知道,买进时的股价是代价,卖出时的股价和代价之间的差价是收益。我们的目的是希望代价最低,收益最高。以上面的股价序列为例,如果我们在第一天以7元的价格买入股票,这时代价是7,收益是0。到了第二天,现在的股价是1,意味着此时代价可以是1,而收益是1-7等于-6。所以我们更新一下代价,但是不更新收益,此时代价是1,收益是0。从人类的思维来说,这是选择在第二天买进,然后等等看。到了第三天,现在的股价是5,此时的代价可以是5,而收益是此时的股价减去之前的代价5-1等于4。所以我们 ...
R语言获取标准中国地图
地图在哪里空间数据分析离不开基础地理数据的支持,比如省市县乡等各级行政区划的数据。然而我国的基础地理数据处于一种薛定谔的状态,往往找不到一个能给出基础地理数据的政府部门的官网。有些网站会共享一部分基础地理数据,但是申请数据的手续有时非常复杂, 即要注册提交个人信息,又要手持身份证拍照,还要写下申请书。于是在大部分情况下只能转向万能的某宝,说多了都是泪。
最近突然发现,民政部的官网悄咪咪的提供了一个接口可以获取到一些基础地理数据。既然是民政部门提供的数据,那当然是最权威的,再也不用担心有些数据中存在的南海九段线缺失,台湾岛没有等问题啦。
获取全国县级地图民政部提供了省级与县级的 json 格式地图数据,我们可以使用 R 语言的 sf 包读取需要的数据,然后使用 tmap 包来绘制地图。
library(sf)library(tmap)# 民政部官网url <- "http://xzqh.mca.gov.cn/data/"# 获取全国县级地图xian_quanguo <- sf::st_read( dsn = paste0(url, "xian ...
说一说二分查找
二分查找二分查找也称折半查找,思想很简单,对于一个有序数组,查找数组中是否存在指定元素,只需比较指定元素与数组中间元素的大小关系,通过这种比较来判断下一次查找的范围,直到完成整个查找。尽管二分查找的基本思想相对简单,但有时它的细节可以令人难以招架。
一个简单的二分查找实现public int binSearch(int[] nums, int key) { int left = 0; int right = nums.length - 1; while (left <= right) { int mid = left + ((right - left) >>> 1); if (nums[mid] > key) { right = mid - 1; } else if (nums[mid] < key) { left = mid + 1; } else { return mid; } ...
LeetCode第204题Count Primes
Count PrimesCount Primes给出一个数,计算小于这个数的所有的素数个数。例如,输入10,则10以内的素数有四个,分别为2,3,5,7,故返回4。
求素数的问题相信很多计算机专业的同学在大一刚接触编程的时候一定会碰上,求素数也不难。但是在这里是求素数的个数,一个很简单的思路是调用素数判断的函数,如果是素数则计数加一,最后返回结果。
//Runtime: 548 ms, faster than 13.15% of Java online submissions for Count Primes.public static int countPrimes(int n) { int count = 0; for (int i = 1; i < n; i++) { if (isPrime(i)) { count++; } } return count; } public static boolean isPrime(int n) { if (n < ...