简单的活着

Java Method

Posted on By Mista Cai

LeetCode

3.无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

暴力法

  1. 枚举所有子串
  2. 使用集合检查子串是否有重复字符

滑动窗口

[i, j)左开右闭,向右侧滑动索引j,如果它不在 HashSet 中,我们会继续滑动 j

这样找到的没有重复字符的最长子字符串将会以索引 ii 开头。

如果对所有的 i 这样做,就可以得到答案。

##

Question

Cannot make a static reference to the non-static method lengthOfLongestSubstring(String) from the type uniqueSubstring

java中静态方法不可以直接调用非静态方法和成员,也不能使用this关键字。

Cannot infer type arguments for hashmap<>

import java.util.Map; //hashmap添加map
import java.util.Set; //hashset添加set

map重复

map是无序的,它的查询需要通过key的值来查找,如果你定义两个同样的key,那么一个key就对应了多个值,这样就违背了java对map的定义,键和值是一一对应的。所以key不可以重复。

重复的值会覆盖之前的键值对。

try catch finally

try catch finally 都有返回:最终都会得到finally的返回结果。 try catch 都有返回 finally没有返回:try出现异常,会得到catch的返回结果。finally中的操作,不影响返回结果。 try catch 都有返回 finally没有返回:try没有异常,会得到try的返回结果。 finally中的操作,不影响返回结果。

重载

方法名一致,形参列表不同

Vector & ArrayList

vector支持线程的同步,也就是内部加锁的,但是效率低;因此新版JDK加入了线程不安全的ArrayList。

Java泛型

泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

泛型通配符

任意类型,Object以及任意Java类。

? extends E 向下限定,E及其子类

? super E 向上限定,E及其父类

String StringBuffer StringBuilder

String: 字符串常量,字符串长度不可变。Java 中 String 是 immutable(不可变)的。

  • String 是不可变的对象, 因此在每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,性能就会降低。

StringBuffer: 字符串变量(Synchronized,即线程安全)。

  • 使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。所以多数情况下推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。
  • append 方法始终将这些字符添加到缓冲区的末端;
  • insert 方法则在指定的点添加字符。

StringBuilder: 字符串变量(非线程安全)。在内部,StringBuilder 对象被当作是一个包含字符序列的变长数组。

  • 该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。
  • StringBuilder():创建一个容量为16的StringBuilder对象(16个空元素)

substring

[)左闭右开,str.substring(0, str.length() - 1)str少一位。

implement 实例

实例不需要main了吗?

class RunnableDemo implements Runnable {
   private Thread t;
   private String threadName;
   
   RunnableDemo( String name) {
      threadName = name;
      System.out.println("Creating " +  threadName );
   }
   
   public void run() {
      System.out.println("Running " +  threadName );
      try {
         for(int i = 4; i > 0; i--) {
            System.out.println("Thread: " + threadName + ", " + i);
            // 让线程睡眠一会
            Thread.sleep(50);
         }
      }catch (InterruptedException e) {
         System.out.println("Thread " +  threadName + " interrupted.");
      }
      System.out.println("Thread " +  threadName + " exiting.");
   }
   
   public void start () {
      System.out.println("Starting " +  threadName );
      if (t == null) {
         t = new Thread (this, threadName);
         t.start ();
      }
   }
}
 
public class TestThread {
 
   public static void main(String args[]) {
      RunnableDemo R1 = new RunnableDemo( "Thread-1");
      R1.start();
      
      RunnableDemo R2 = new RunnableDemo( "Thread-2");
      R2.start();
   }   
}