Day013 String的一些

数组

常见的算法、

排序算法

  • 冒泡排序

image-20210427151459058

 

 

  • 选择排序

  • image-20210427153015428

    每一次从这堆参数比较的数据当中找出最小值,

    拿着这个最小值和最前面的元素交换位置。

选择排序比冒泡排序好在:每一次交换数据都是有意义的。

 

关键点:选择排序的关键在于,怎么找出一堆数据中最小的。

 

 

 

查找算法

二分法查找

  • 一个一个挨着找,直到找到为止;

  • 二分法查找(算法) 效率比较高;

 

将查找封装成一个方法:

传什么:第一个参数是数组,第二个参数是被查找的元素

返回值:返回被查找的这个元素的下标。


拿着中间的元素和目标要查找的元素进行对比

  • 二分法查找算法是基于排序的基础之上的。

  • 二分法查找效率要高于一个一个挨着查找

  • 原理:image-20210427154237250

public class ArrayUtill{
   
}

image-20210427200853220

 

介绍一下java。util。Arrays

import java.util.Arrays; //导包

sout

 

 

 

 

 

以上的算法在以后的java开发中,不需要使用

java中已经封装好了,直接调用就行

 

工具类大部分方法都是静态的

使用sun公司提供的数组工具类:java。util。Arrays;

int[] arr = {12122,124,324,3,23,543};
Arrays.sout(arr);
// 遍历输出
for (int i=0;i<arr.length;i++){
   System.out.println(arr[i]);
}

Arrays 是一个工具类

其中有一个 sort()方法,可以排序,静态方法,直接使用类名调用就行

 

 

 

常用类

string类

java.lang.String

  • String表示字符串类型,属于引用数据类型,不属于基本数据类型

  • java中随便使用双引号括起来的都是String对象。例如:“abc”,“def”

  • java中规定双引号括起来的字符串,是不可变得,也就是“abc”自出生到最终死亡,不可变,不能变成“abcd”

  • 在jdk中双引号括起来的字符串都是直接存储在方法区的字符串常量池中

    为什么sun公司把字符串存储在一个字符串常量池中,因为字符串在实际的开发中使用太频繁,为了执行效率,所以把字符串放到了方法区的字符串常量池中

     

image-20210427202946431

image-20210427203040718

String s1 = “abc”;

s1里面保存的不是abc字符串

s1里面保存的是“abc”字符串的内存地址

String相关面试题

    String s1 =“hello”;
   String s2 = “hello”;
   System.out.println(S1==S2);
// 双等号比较的是保存的内存地址
// true
String x = new String ("xyz");
   String y = new String ("xyz");
System.out.println(x==y);
//false
//通过这个案例的学习,我们知道了,字符串之间的比较不能使用“==”
//“==” 不保险,应该调用String类的equals方法
System.out.println(x.equals(y));//true


String类已经重写了Equals方法,以下的equals方法是调用的String重写之后的equals方法

 

建议:System.out.println(“dfasdfahsoi”.equals(k));

可以避免空指针异常

System。out。println(k。equals(“asdfa”));

存在空指针异常的风险、不建议这样写

 

垃圾回收池是不会释放常量的

image-20210427204851810

 

int i =100; i变量中保存的是100这个值

String s = “avsad”; s变量中保存的是字符串对象的内存地址 0x11111

面试题

image-20210427205126827

 

  • 输出字符串的话,不会输出字符串内存地址

  • String类中已经重写了ToString方法

 

String s2 = new String (shuzu,1,2);
   //1位起始位置,2为传的个数
   //将shuzu中的一部分转换成字符串

String 的构造方法

image-20210427205830205

String类中的常用方法

  • char c = “sdfasdf”.charAt(int index)
       
    char c = "中国人".charAt(1);    //国
  •  

  • int result = "abc".compareTo("abc");
    //0
    前后一致,为0
       前小后大,为-1
       前大后小,为1;
           
  • 判断相等不相等 还判断谁大谁小

  • ("dsgfdagdfdsds").contains("sdfasd")
  • 前面一个是否包含后面//true false

  • "sdfasd.txt".endsWith(".txt"); //true
  • 判断当前字符串是否以某个字符串结尾

  • “abc”.equals("abc");

    判断相等不相等

  • equalsIgnoreCase()
  • 忽略大小写

  • .getBytes()

    将字符串对象转化成字节数据

     

  • indexOf(String str)
  • 判断某个字符串在当前字符串第一次出现索引(下标)

  • .isEmpty();

    判断是否为空字符串

  • .length();

    判断字符串长度

    判断数组长度是length属性,判断字符串长度是length()方法

     

  • .lastIndexOf(String str);

    判断某个字符串在当前字符串中最后一次出现 的索引(下标)

  • replace
  • 替换 支持多个一起替换 替换所有符合

  • split(“-”)//以“-”为分隔符进行拆分

    拆分字符串

  • startsWith("sdfa")

    判断字符串是否以“sdfa”开始

  •     substring(7)
           (开始)
       substring(7,10
           (起始位置,结束位置)
  • 截取

  • toCharArry()

    image-20210427222859857

    一个一个遍历

     

  • toLowerCase()

    全部转换为小写

  • toUpperCase();

    转换为大写

  • trim()

    去除字符串中的前后空白

  • String中只有一个方法是静态的,不需要new对象
    String s1 =String.valueOf(1000);

    方法叫做valueOf

    作用:将“非字符串”转换成字符串

    如果valueOf(一个对象)

    会调用该对象的toString()方法

     

  • 本质上System。out,println()这个方法在输出任何数据的时候都是先转换成字符串再输出。

java中的字符串是不可变得,每次拼接都会产生新字符串

这样会占用大量的方法区内存,造成内存空间浪费

StringBuffer.append("adfa");

\append 是追加的意思

如果数组满了,会自动扩容


如果以后需要进行大量的字符串拼接操作,建议使用jdk中自带的:

java.lang.StringBuffer

java.lang.StringBuilder

 

  • 如何优化Stringbuffer性能

创建StringBuffer的时候尽可能给定一个初始化容量

最好减少底层数组的扩容次数,预估计一下,给一个大一些的初始化容量

关键点,给定一个合适的初始化容量

image-20210428111340279

java.lang.Stringbuilder

StringBuffer 和 StringBuilder区别:

StringBuffer在多线程运行环境下是安全的

Stringbuilder在多线程环境下运行是不安全的

 

 

posted @ 2021-04-28 11:18  各人blanknote  阅读(48)  评论(0)    收藏  举报