ARTS第二周

第二周。

1.Algorithm:每周至少做一个 leetcode 的算法题
2.Review:阅读并点评至少一篇英文技术文章
3.Tip:学习至少一个技术技巧
4.Share:分享一篇有观点和思考的技术文章

以下是各项的情况:

Algorithm

链接:[LeetCode-01]-Two Sum

上周的有点问题 :

  假如数组【3,2,4】给的数据是 6 ,按我之前的思路 直接从遍历去找当前遍历的数和所给数据和的差值,但如果从第一个数3走,那给出的答案就会是【0,0】而非期望的【1,2】。所以需要修改:

class Solution {
    public int[] twoSum(int[] nums, int target) {

        HashMap<Integer,Integer> map= new HashMap<Integer,Integer>();
        int[] result = new int[2];
        for(int i=0;i<nums.length;i++){
            if(map.containsKey(target-nums[i])){
                result[1]=i;
                result[0] = map.get(target-nums[i]);
                break;
            }else{
                map.put(nums[i],i);
            }
        }
        return result;

    }

}

  思路 是 干脆就来两个指针 来指向和存 就不会出现指向同一个位置的了。

这周的链接 :[LeetCode-07]-Reverse Integer

  Java:

class Solution {
    public int reverse(int x) {
        if(x == 0){
           return x;
        }else{
        int r = 0;
         while(x != 0){
            if(r > 2147483647/10 || r < -2147483647/10)
                return 0;
            r = r*10 + x%10;
            x = x/10;
         }
            return r;
        }
    }
}

Review

分享   HashMap 如何在 Java 中工作

  回顾

  1. 内部存储器

    JAVA 中 HashMap 类 是 Map <K,V> 接口的实现 。该接口的主要方法是:

    • V put(K key, V value)
    • V get(Object key)
    • V remove(Object key)
    • Boolean containsKey(Object key)

    

    HashMaps用一个内部类来存储数据:Entry <K,V>。此 Entry 是一个带有两个额外数据的简单键值对:

    • 对另一个 Entry 的引用,以便 HashMap 可以存储单个链接列表等条目
    • 一个哈希值用来存 key 值。这个哈希值是用来存储该散列值,以避免每次使用 HashMap 需要重新计算散列。

    

    以下是JAVA 7中Entry实现的一部分:

static class Entry<K,V> implements Map.Entry<K,V> {
        final K key;
        V value;
        Entry<K,V> next;
        int hash;
…
}

    HashMap将数据存储到多个单链接的条目列表(也称为桶,buckets 或 目录 ,bins)中。所有列表都在 Entry(Entry <K,V> [] 数组)数组中注册,并且此内部数组的默认容量为16。

      图显示了具有可为空条目数组的 HashMap 实例的内部存储。每个条目都可以链接到另一个条目以形成链接列表。

    具有相同散列值的所有键都放在同一个链表(bucket)中。具有不同散列值的键可能最终出现在同一个 bucket 中。

    当用户调用 put(K key,V value)或 get(Object key)方法时,该函数计算条目所在桶 (bucket)的索引。然后,函数遍历列表,寻找具有相同 key 的条目(使用 key 的 equals() 函数)。

    对于 get()语句,函数返回与条目 Entry 关联的值(如果条目 Entry 存在)。

    在put(K key,V value)语句中,如果条目 Entry 存在,则函数将用新值来替换原值,否则它将在单链接列表的头部创建新条目(来自参数中的键和值)。

    bucket 的这个索引(链表)是由 Map 以3个步骤生成:

    •   它首先获取 key 的哈希码 hashcode
    •   它重新散列 rehash 哈希码 , 以防止键的散列函数出错,因为键会将所有数据放在内部数组的相同索引(bucket)中
    •   它接受重新散列的哈希码,并用数组的长度(- 1)对其进行位掩码操作。此操作确保索引不能大于数组的大小。您可以将其视为用来计算优化的模数函数

  2. 自动调整大小

    创建HashMap时,可以使用以下构造函数指定初始大小和loadFactor:

public HashMap(int initialCapacity, float loadFactor)

      如果未指定参数,则默认initialCapacity为16,默认loadFactor为0.75。initialCapacity表示链接列表的内部数组的大小。

    每次使用 put(…) 在 Map 中添加新键/值时,函数都会检查是否需要增加内部数组的容量。为了做到这一点,map存储了2个数据:

    •  Map 的大小:它表示HashMap中的条目数。此值在每次添加或删除条目时更新。
    •  阈值:它等于(内部数组的容量)* loadFactor,每次调整内部数组的大小后都会刷新它

    在添加新条目之前,put(…)检查大小是否为>阈值,如果是,则重新创建一个大小为双倍的新数组。由于新数组的大小发生了变化,索引函数(它返回按位操作“hash(key)和(sizeOfArray-1)”)发生了变化。因此,调整数组大小会创建两个以上的bucket(即链表),并将所有现有的条目重新分配到bucket中(旧的和新创建的)。

    该图显示了调整内部数组大小前后的表示形式。在增加之前,为了得到条目E,map 必须遍历一个包含所有5个元素的列表。调整大小之后,相同的 get() 只遍历一个包含2个元素的链表,调整大小之后get()的速度是原来的2倍!

    注意:HashMap只增加了内部数组的大小,而没有提供减小的方法。

  未完待续  , 抽空补完 ...

  3. 线程安全

  4. 关键不变性

  5. Java8的改动

  6. 内存开销

Tip

  曾遇到一个问题: 

      一个 springMVC 项目中 报异常信息 :  cvc-complex-type.2.3: Element ‘beans‘ cannot have character [children], because the type‘s content type is element-only.

  且 .xml 最底部的 </bean> 标红,且有 Error 提示。 如图示 :

  异常分析过程 :

  猜想可能是没法确认控制器包的位置,那么就需要从项目的src级别开始给出完整的地址,但是我排查了很久 没发现配置文件和代码有什么错 怎么回事?

  异常解决方案 : 

       Google 后在https://stackoverflow.com/questions/26725306/springs-element-beans-cannot-have-character-children-because-the-types-con#  获得解决 .感谢Stack OverFlow 。

我有同样的问题。我看了几个小时。我找不到任何问题。然后我决定,如果你使用不同的编辑器,有时会看到不同的东西。我关闭了Netbeans并在emacs中打开了该文件。我立即看到,有一些不间断的空格字符,或制表符,或某些类型的空白不是空格。我不知道它是哪个角色但它在emacs中以红色显示,但在Netban中是空白

  我看了这个答案后 , 发现果然是空格的问题 。 同时也证明了, 99%的代码问题源于愚蠢的琐碎问题。

  

Share

  Code Tells You How,Comments Tell You Why。 Brilliant!这周继续推荐

  耗子哥的文章 高效学习:如何学习和阅读代码

原文地址:https://www.cnblogs.com/jxl00125/p/11075078.html

时间: 2024-10-10 07:36:01

ARTS第二周的相关文章

ARTS 第二周

1.Algorithm 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. 您可以假设除了数字 0 之外,这两个数都不会以 0 开头. 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 对两数相加方法的可视化: 342 + 465 = 8

2014025670(12)《嵌入式系统程序设计》第二周学习总结

这周学习了gcc和gdb的使用还有makefile. 教材学习内容总结 教材内容开始看的有些吃力,很多地方都不太懂,网上查询和询问同学和老师之后,了解了很多,但是具体操作和实现方面还是比较难. 教材学习中问题和解决过程 对于gcc的操作在实验楼的学习中还是比较顺利,gdb的操作感觉有些村存在问题-----gdb的调试方面有些吃力,应该是自己没努力的结果,打算把问题汇总一下,再试试实验. 课后作业中的问题和解决过程 应用实验楼的第二周,第一周的内容感觉简单,消化很快,没想到第二周就感觉有些吃力,不

学习进度条第二周

  第二周 所花时间 12小时 代码量 180行左右 博客量 3 了解到的知识点 Javaweb开发html的学习,还有javascript的特效和链接网页跳转,网页中图片自行转换,以及构建之法第1.2.3章相关的知识.

20155336 2016-2017-2《JAVA程序设计》第二周学习总结

20155336 2016-2017-2 <JAVA 程序设计>第二周学习总结 教材学习内容 1: GIT版本检测 2: JAVA中基本类型 整数 字节 浮点数 字符 布尔(▲) 通过API可以得知各个类型可存储的数值范围 public class Range {public static void main(String[] args){ //byte.short.int.long的范围 System.out.printf("%d~%d%n", Byte.MIN_VALU

《Machine Learning》系列学习笔记之第二周

第二周 第一部分 Multivariate Linear Regression Multiple Features Note: [7:25 - θT is a 1 by (n+1) matrix and not an (n+1) by 1 matrix] Linear regression with multiple variables is also known as "multivariate linear regression". We now introduce notatio

20145123刘森明《Java程序设计》第二周学习总结

教材学习内容总结 这一章学习的知识,在以前的C语言中已经学习过了.所以学起来比较的轻松.主要讲的就是数据与变量的类型和运算符:流程控制等知识点. 教材学习中的问题和解决过程 这周在Java上花费的时间较多.首先对于java语言中,虽然之前对于java的语言的语法有所了解,但是对于具体的细节还存在问题.对于输出函数System.out.printf()和Syetem.out.println()的区别,看书后得知Syetem.out.println()函数在编译后会换行,在第一章的“hello wo

20145229吴姗珊《Java程序设计》第二周学习总结

教材学习内容总结 一.类型.变量与运算符 1.类型 整数:可细分为short整数.int整数和long整数.不同长度的整数可储存的整数范围也不同. 字节:byte类型顾名思义.长度就是一字节,需要逐字节处理数据时则需要使用.用于整数时,可表示-128~127的整数. 浮点数:主要用来储存小数数值,主要分为float和double. 字符:char类型用来储存‘A','B','林'等字符符号. 布尔:boolean类型可表示true和false,分别表示真和假. 2.变量 基本规则:用关键词来声明

第二周感悟

开始上自习的第二周,觉得得努力去尝试一下,高中时没努力学习,结果高考失败了,大学前两年半也是得过且过的度过每一天,感觉再不努力就要废了,就想着考研,考上一个更好的学校,圆了之前的梦,既然有了目标就要坚持下去,不能认怂,不管结局如何,以后都会留下我曾经奋斗过的记忆,会使我的人生添上一丝色彩,现在每天都去上自习,日子过得挺充实的,这是以前从来没有过的感觉,平淡而又颓靡的生活不是我们需要的,在我们的这个的年纪就需要抛开一切放手去博,俗话说,搏一搏,单车变摩托,不拼搏的话,不要说单车,连玩具车也不会有的

进度条--第二周

第二周 所花时间(包括上课) 27个小时 代码量(行) 600行 博客量(篇) 3篇 了解到的知识点 1.文件的输入输出流的复习2.重新复习数据结构中的栈,但是还是又不懂的地方,导致这次实验括号的功能没有加入.