查漏补缺个人总结

文章目录

    • 数据结构
    • Java语言
      • Integer处理-128-127的数情况
      • Integer.parseInt() Integer.valueOf()
      • 反射机制
      • 浮点型的比较
      • 字符串问题的一些处理
    • 数据库
    • GC
    • socket
    • 小细节
      • 相等的细节
      • 数组赋初值
    • 算法题
      • n sum
      • n 皇后
      • 出现一次的数字
    • 计算机网络
      • HTTP与HTTPS

数据结构

Java语言

Integer处理-128-127的数情况

因为valueOf这个函数源码是将常用的-128~127的对象缓存下来
而不是新开辟一个内存空间
所以代码中b1==c1 返回true
而d == e 返回false

  int a=128;
                 Integer b=128;//相当于int b= Integer.valueOf(128);
                 Integer c=128;
                 Integer b1=127;
                 Integer c1=127;
                 Integer d=new Integer(128);
                 Integer e=new Integer(128);

                 System.out.println(a==b);//true
                 System.out.println(b==c);//false
                 System.out.println(b1==c1);//true
                 System.out.println(a==d);//true
                 System.out.println(c==d);//false
                 System.out.println(d==e);//false

Integer.parseInt() Integer.valueOf()

前者将String返回成int 或者返回成Integer对象

反射机制

反射机制

浮点型的比较

解决方法:
BigDecimal b1 = new BigDecimal(Float.toString(xx));
BigDecimal b2 = new BigDecimal(Float.toString(yy));
float ss = b1.subtract(b2).floatValue();

java 中浮点型的数值(float double这种)在进行相加相减或者比较的时候 
会先转换成二进制即(E=M*R^K) 的形式, 由于小数的二进制表示 是不一定存在的 
例如0.1 与0.25 用二进制表示 0.1是无线循环的二进制数 0.25则是0.01 
然而在计算时候 会有一个舍去的策略。 所以导致最后结果会有偏差
例如1.0-0.9=0.10000000000000009
而在比较的时候
 a=2.0  b=1.9
  (a==b));
      使用“Math.abs()”方法比较是否相等:" + (Math.abs(a-b)>0) );
      使用“Math.abs()”方法比较是否相等(比较宽容的限制):" + (Math.abs(a-b)<0.00000001) );
   比较大小“<”:" + (a”:" + (a>b));

执行结果:
-------使用“==”符号比较是否相等:true
-------使用“Math.abs()”方法比较是否相等:false
-------使用“Math.abs()”方法比较是否相等(比较宽容的限制):true
-------比较大小“<”:false
-------比较大小“>”:false

因此一般不会直接用“==”或者“!=”对两个浮点数进行比较。
判断两个浮点数float a 与 float b 是否相等可以根据他们的差的绝对值是否大于0来进行判断。
判断相等:
if(Math.abs(a-b)<=0){相等}
或者
if(!Math.abs(a-b)>0){相等}
判断不等:
if(Math.abs(a-b)>0){不相等}

字符串问题的一些处理

Character类里面一些实用的方法:
Character.isLetterOrDigit
Character.isLetter
Character.isDigit
判断一个字符时候为空白的字符isWhitespace()
判断一个字母是否为大写isUpperCase()

数据库

GC

socket

小细节

StringBuilder.replace(int start ,int end ,int val);
Integer.parseInt(String str , int radix);
Integer.to*String(int i);
Integer.toUnsignedString(int i , int shift(二进制位1 十六进制为4);

相等的细节

在LeetCode209题中,建立了两个Map 当用get方法比较时候 用了

if (map1.get(word[i]) != map2.get(strings[i]))
                return false;

这个因为Map 所以get的是Integer对象 就算值相同 那也比较的是内存显然是不同的
所以解决方法如下 要么用两个int值接住 要么用equal方法

if (map1.get(word[i]).equals( map2.get(strings[i])))
                return false;
          
          int a= map1.get(word[i]);
          int b = map2.get(strings[i)];
          if(a!=b)
          return false;
        	
      
      	

数组赋初值

如果把一组数组赋统一初值 不需要用for循环 用
Arrays.fill(name,val);

算法题

n sum

n sum 问题解答

n 皇后

n 皇后

出现一次的数字

出现一次的数字

计算机网络

HTTP与HTTPS

HTTP 与 HTTPS

你可能感兴趣的:(JAVA,LeetCode,数据结构)