当前位置: 首页 > news >正文

Java深入

String相关的类

1.String不可变的类

源码:

public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {/** The value is used for character storage. */private final char value[];/** Cache the hash code for the string */private int hash; // Default to 0/** use serialVersionUID from JDK 1.0.2 for interoperability */private static final long serialVersionUID = -6849794470754667710L;
}
final char[] value; ---- 常量数组不可变

2.StringBuffer和StringBuilder

可变的类,线程安全,效率低,方法基本都加上了synchronized

源码:

   abstract sealed class AbstractStringBuilder{char[] value; ---- 可变数组}public final class StringBuffer extends AbstractStringBuilder{public synchronized StringBuffer append(Object obj) {toStringCache = null;super.append(String.valueOf(obj));return this;}}
StringBuilder:可变的类,线程不安全,效率高,StringBuffer 一样的,但是方法没有加上synchronized

3.面试知识点

面试题一:

        常量池中的数据是唯一的

//面试题一:以下代码创建几个对象//答案:一个 (常量池中的数据是唯一的)String str1 = "hello";String str2 = "hello";System.out.println(str1 == str2); //true

   面试题二:

        //面试题二:以下代码创建几个对象//答案:三个 (堆内存中创建了两个对象,常量池中创建了一个对象)String str3 = new String("hello");String str4 = new String("hello");System.out.println(str3 == str4); //false

面试题三:

//面试题三:String的拼接问题 常量在编译时直接拼接String str5 = "he" + "llo"; //相当于 String str5 = "hello";System.out.println(str5 == str1); //true

面试题四:

        //面试题四:String的拼接问题 常量在编译时直接拼接final String str6 = "he";final String str7 = "llo";String str8 = str6 + str7; //相当于 String str8 = "hello";System.out.println(str8 == str1); //true

面试题五:

        //面试题五:String的拼接存在变量时,底层创建StringBuilder对象拼接String str9 = "he";String str10 = "llo";String str11 = str9 + str10; //相当于 String str11 = new StringBuilder(String.valueof(str9)).append(str10).toString();System.out.println(str11 == str1); //false

总结:

        字符串常量与常量拼接,会去在常量池里面找有没有,如果没有常量池创建对象。

正则表达式

        含义:用来描述或者匹配一系列符合某个语句规格的字符串

泛型

        理解:泛型是一种数据安全的做法,它限制了集合当中元素的类型

1.ArrayLis底层的泛型使用

 * <E> -- element -- 元素
 * <T> -- type ----- 类型
 * <K,V>- Key,Value- 键,值
 * <N,V>- Name,Value-名,值

package com.cuihub.test01;
/*** * @author codercui** @param <E>* <E> -- element -- 元素* <T> -- type ----- 类型* <K,V>- Key,Value- 键,值* <N,V>- Name,Value-名,值* */
public class MyArrayList<E> {public void add(E e){}
}

2.泛型的限定

创建A类,B类

package com.cuihub.test01;public class A {}
package com.cuihub.test01;public class B extends A {}

        1. -- 表示可以传入任意类型

    //1. ? -- 表示可以传入任意类型public ArrayList<?> method01(){//		ArrayList<String> list = new ArrayList();ArrayList<Integer> list = new ArrayList();return list;}

        2. ? extends A -- 表示只能传入A类及其子类

	// 2. ? extends A -- 表示只能传入A类及其子类public ArrayList<? extends A> method02(){//		ArrayList<A> list = new ArrayList();ArrayList<B> list = new ArrayList();
//		ArrayList<String> list = new ArrayList(); //类型不匹配return list;}

        3. ?super A -- 表示只能传入A类及其父类

	//	3. ?super A -- 表示只能传入A类及其父类public ArrayList<? super A> method03(){//		ArrayList<A> list = new ArrayList();ArrayList<Object> list = new ArrayList();return list;}

迭代器

1.foreach 的底层实现

      原理: foreach底层是for+Iterator实现的

		ArrayList<String> list = new ArrayList();list.add("小红帽");list.add("大灰狼");for (String str : list) {System.out.println(str);}

        底层实现:

        list.iterrator() ------> 获取迭代器

        iterator.hasNext() ------> 判断集合是否存在下一个元素

        iterator.next() -------> 获取迭代器指向的下一个元素。当调用 next() 方法时,迭代器会向前移动一位,并返回当前所指向的元素。

		//foreach 的底层实现String next;for(Iterator iterator = list.iterator();iterator.hasNext();System.out.println(next)){next = (String) iterator.next();}

集合

1.含义:

  1. 集合是Java API所提供的一系列类,可以用于动态存放多个对象 (集合只能存对象)

  2. 集合与数组的不同在于,集合是大小可变的序列,而且元素类型可以不受限定,只要是引用类型。(集合中不能放基本数据类型,但可以放基本数据类型的包装类)

  3. 集合类全部支持泛型,是一种数据安全的用法。

 2.集合与数组的不同

数组:一旦初始化后长度不可变,元素类型受限定(String类型的数组只能装String的数据),数组可以存储基本数据类型

集合长度可变的序列,元素类型不受限定(一个集合可以存储多个数据类型的元素),集合只能存储引用数据类型

3.Collection家族

3.1List接口

特点:有序且可重复(因为List接口中添加了许多针对下标操作的方法)

实现类:

  1. ArrayList

  2. LinkedList

  3. Vector

  4. Stack

3.2 Set接口

特点:无序且不可重复

        无序:存入的顺序跟取出顺序是不一样的,无序不等于随机

实现类:

  1. HashSet

  2. LinkedHashSet

  3. TreeSet

3.3 Map家族

实现类:

  1. HashMap

  2. LinkedHashMap

  3. Hashtable

  4. ConcurrentHashMap

  5. TreeMap

  6. Properties

3.4 


http://www.mrgr.cn/news/98876.html

相关文章:

  • Qt信号与槽
  • golang处理时间的包time一次性全面了解
  • uniapp-商城-26-vuex 使用流程
  • 强化学习算法系列(五):最主流的算法框架——Actor-Critic算法框架
  • Ubuntu源码制作openssh 9.9p2 deb二进制包修复安全漏洞 —— 筑梦之路
  • Rust 中的Relaxed 内存指令重排演示:X=0 Y=0 是怎么出现的?
  • 抽象的https原理简介
  • SQL刷题记录贴
  • 机器学习 | 细说Deep Q-Network(DQN)
  • 【Python爬虫基础篇】--1.基础概念
  • git撤销提交
  • C++面试
  • 定制化 Docsify 文档框架实战分享
  • 常见的服务器硬盘接口
  • HTTP/1.1 队头堵塞问题
  • 消息中间件——RocketMQ(一)
  • nodejs使用pkg打包文件
  • 面试题之数据库-mysql高阶及业务场景设计
  • 论文阅读VACE: All-in-One Video Creation and Editing
  • 【Python】用Python写一个俄罗斯方块玩玩