每日一练进击大厂【DAY2】JAVA基础2

108 阅读5分钟

一、String、StringBuffer、StringBuilder区别

  1. 三者都是用来处理字符串的。
  2. 字符在字符串中的索引都是从0开始。
  3. String是字符串常量,StringBuffer、StringBuilder是字符串变量。
  4. StringBuilder效率高,是线程非安全的。
  5. StringBuffer是线程安全的,但是效率比StringBuilder要低。
  6. 提供的length()、charAt()、subString()方法且用法相同。
  7. String连接字符串用“+”,StringBuffer和StringBuilder连接字符串用append方法追加。
  8. String的equals()方法比较的是内容,StringBuffer和StringBuilder的equals()方法比较的是地址。
  9. String创建的对象不可变,StringBuffer和StringBuilder创建的对象是可变的。
  10. String的toString()方法返回的是当前String实例的引用,StringBuffer和StringBuilder的toString()方法返回的是以当前StringBuffer和StringBuilder实例为内容的新的String实例的引用。
  11. 操作少量的数据建议用String,单线程字符串缓冲区下操作大量数据建议用StringBuilder,多线程字符串缓冲区下操作大量数据建议用StringBuffer。

二、String str="i";和String str = new String("i");区别

String str="i";JAVA虚拟机将其分配到常量池中,而常量池中没有重复的元素,JAVA虚拟机会先在常量池中检索是否已经有"i",如果有那么将"i"地址赋给变量str,如果没有就创建一个新的然后把地址赋值给变量str。这种情况会创建0个或者1个对象。 String str = new String("i");JAVA虚拟机将其分配到堆内存中,即使内容一样,还是会创建新的对象,如果常量池中没有,还会创建一个对象放到常量池中,所以这种情况可能会创建1个或者2个对象。

三、String常用的方法

indexOf():返回指定字符的索引。 charAt():返回指定索引处的字符。 replace():字符串替换。 trim():去除字符串两端空白。 split():分割字符串,返回一个分割后的字符串数组。 getBytes():返回字符串的 byte 类型数组。 length():返回字符串长度。 toLowerCase():将字符串转成小写字母。 toUpperCase():将字符串转成大写字符。 substring():截取字符串。 equals():字符串比较。

四、List、Set、Map

  1. List与Set具有相似性,他们都是单列元素的集合,它们有一个共同的父接口,Collection。
  2. Set不允许有重复的元素,Set取元素的时候,不能按照索引来取,只能以iterator接口取的所有元素再逐一遍历各个元素,==所以Set是无序的,并且不重复的。==
  3. list表示有先后顺序的集合并且是可重复的,除了可以用iterator接口取得所有元素,还可以使用get(index)方法来明确取第几个。==所以list是有序并且可重复的。==
  4. Map是双列的集合,每次存储时,要以key、value的形式来存储,不能存储重复的key,可以根据key获得相应的value,也可以获得所有的key的集合,还可以获得所有value的集合,获得key和value组合成的Map.Entry对象的集合。

五、ArrayList和LinkedList区别

  1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于双向循环链表的数据结构。
  2. 对于随机访问ge和set,ArrayList要优于LinkedList,因为LinkedList要移动指针。
  3. 对于新增和删除操作add、remove,LinkedList比较占优势,因为ArrayList要遍历全部的数据。

六、ArrayList和Vector的区别

  1. 两个类都实现了list接口,他们都是有序集合,相当于一种动态数组。
  2. Vector是线程安全的,而ArrayList是线程不安全的。
  3. Vertor扩容默认增长原来两倍,ArrayList是1.5倍扩容。
  4. ArrayList效率更高,Vector效率相对低一点,因为Vector有加锁机制,

七、Comparator和Comparable区别

  1. 都是用于比较两个对象顺序的接口。
  2. 都可以使用Collection.sort()方法来对对象集合进行排序。
  3. Comparable在java.lang包下,而Comparator在java.util包下。
  4. Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序。
//如果参数字符串等于此字符串,则返回值 0;
//如果此字符串小于字符串参数,则返回一个小于 0 的值 -1;
//如果此字符串大于字符串参数,则返回一个大于 0 的值 1;
public class ComparableTest implements Comparable {
    @Override
    public int compareTo(Object o) {
        return 0;
    }
}

//如果返回 1  说明o1 > o2 	如 2  1
//如果返回 0  说明o1 = o2	如 cc  cc
//如果返回 -1 说明o1 < o2	如 6  7
public class ComparatorTest implements Comparator {
    @Override
    public int compare(Object o1, Object o2) {
        return 0;
    }
}

八、JAVA8新特性

==lambda 表达式:允许把函数作为参数传递到⽅法,简化匿名内部类代码。== 函数式接⼝:使⽤ @FunctionalInterface 标识,有且仅有⼀个抽象⽅法,可被隐式转换为 lambda 表达式。

@FunctionalInterface
public interface Test {
    void sayHello(String msg);
}

public class JDK8Test {
    public static void main(String[] args) {
        Test test = msg -> System.out.println("hello"+msg);
        test.sayHello("测试");
    }
}

==⽅法引⽤:可以引⽤已有类或对象的⽅法和构造⽅法,进⼀步简化 lambda 表达式。== 接⼝:接⼝可以定义 default 修饰的默认⽅法,降低了接⼝升级的复杂性,还可以定义静态⽅法。 注解:引⼊重复注解机制,相同注解在同地⽅可以声明多次。注解作⽤范围也进⾏了扩展,可作⽤于局部变量、泛型、⽅法异常等。 类型推测:加强了类型推测机制,使代码更加简洁。 ==Optional 类:处理空指针异常,提⾼代码可读性。== ==Stream 类:引⼊函数式编程⻛格,提供了很多功能,使代码更加简洁。⽅法包括 forEach 遍历、count统计个数、filter 按条件过滤、limit 取前 n 个元素、skip 跳过前 n 个元素、map 映射加⼯、concat合并 stream流等。== ⽇期:增强了⽇期和时间 API,新的 java.time 包主要包含了处理⽇期、时间、⽇期/时间、时区、时刻和时钟等操作。


总结

人人都有一个进大厂的梦,希望以上的内容能够对你我这样的人有所帮助。