Java应急 知识

  1. 通配符相关:
    首先我们要明白类型擦出是怎么回事,也就是说,类型的确定是编译时确定的;编译时发现你往里存的对象有问题就报错;如果运行了你通过反射强制向里面添加元素其实是随便的;
    < T >表示某种类型,比如Integer;< ? >表示不知道具体那种类型;< T >简单啊,你添加,读取都是T类型;?呢,不知道是哪种类型,能放进去吗?显然不能啊,你总不能把电视和地球放在一起把,这样会很奇怪;但是?读取,就会很方便,因为集合里已经有了这么一些东西,我管它是啥呢,拿出来就好了;
    以这种思想,我们来看一下上下界通配符;
    < ? extend A> 也就是T是个A的子类,那是哪个呢?很显然,你没办法向里面储存A的全部子类吧;比如T是个A的其中大儿子的儿子;那么A小儿子的儿子,很显然存不进去的嘛;但是反过来我不管T是哪个类,它总可以向上转型为A,所以就可以读取并转型为A;(不可转型为A的子类);
    < ? super B> 就是说T是B得一个父类,那么很显然的,存什么我都可以把它转型为T嘛,因为T是B的父类嘛;但是当你读取的时候,T?B的父类,那是个什么玩意,到底是父亲,还是爷爷,还是Object呢?所以无法读取;除非你读取转型为Object;

    more >>

剑指Offer 56 链表中环的入口结点

题目描述

一个链表中包含环,请找出该链表的环的入口结点。

思路

  1. hashset,最快的想法;重复检验嘛
  2. 截断指针;因为什么呢?因为你会发现入口结点有两个入口,如果从头开始截断指针,最后的这个一定是入口结点;
  3. 神奇的双指针:其实这个想法我稍微想过,不过步骤比较多,没想明白;首先我们进入了环中,就可以计算环的节点数目;第二个想法是在一个环中,两个结点追逐的话,在绕一圈以后,就会相遇;
    那对这一题来说:
    一个指针在头,另一个提前移动环节点数目,最后就会相遇;

    more >>

剑指Offer 53 正则表达式

题目描述

请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”abaca”匹配,但是与”aa.a”和”ab*a”均不匹配

思路

  1. 其实难点有两个,一个就是*的处理,因为包含三种情况;还有就是指针控制

    more >>

剑指Offer 51数组中重复的数字

题目描述

在一个长度为n的数组里的所有数字都在0到n-1的范围内。
数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。

思路

  1. 我们来思考一下,0~n-1 如果不重复是什么情况,就是0~n-1这些数都有一个,排好序完全就是从小到大;如果存在重复,最后一个数肯定到不了n-1;
  2. i这个数的位置就在i这个位置,所以我们可以用调整位置,如果在这个位置上的数和i一样,就说明有两个i了呗
  3. hashset

    more >>