冒泡排序
3 2 7 6 9
首先拿着第一个数字3,和相邻的2比较,若左边大于右边,交换位置。然后变成 2 3 7 6 9。再用3和7比较,用7和6比较…。一共这样的比较循环4次。
第一次循环留下9,第二次循环留下7,第三次留下6。
也就是每次把最大的那个数放到最后一位。
第一次循环比较4次,第二次循环比较3次。
交换比较浪费。
选择排序
每一次从这堆参与比较的数据中找出最小值。
拿着这个最小值和参与比较的最前面的元素进行交换。
二分法查找
必须是从小排到大。
Arrays工具类的使用
java.util.Arrays这个类中,可以查找我们需要用到的方法。
所有方法都是静态的。类名.方法名。
String类
用双引号括起来的字符串都是直接存储在方法区的字符串常量池当中的。
因为在实际的开发中,字符串使用的太频繁,为了执行效率,放到常量池中。
String s1=“abdc”;
其中abdc在方法区中的常量池中,而s1它存储在main方法中的局部变量,存储的是abdc的内存地址。
字符串对象之间的比较不能使用“==”,不保险,应该调用String类的equals方法。
“testString”.equals(k);这是因为双引号里面的是一个对象,对象就可以调用方法,所以可以点equals方法。
字符串常量池中的字符串也算一个对象。
String s1=“abc”;
String s2=“abc”; 一共创建了3个对象,s1,s2,“abc”。
String类的构造方法
- 字节数组转换成字符串:byte[] bytes={97,98,99}; String s=new String(bytes);输出s自动调用toString方法,输出abc。
- String s3=new String(字节数组,数组元素下标的起始位置,长度);把一部分字节数组转换成字符串。
- char数组全部转换成字符串:char[] chars={'w ',‘s’,‘l’}; String s=new String(chars);输出:wsl。
- char数组部分转换成字符串:String s=new String(chars,1,2)。
- charAt方法:char c=“中国人”.charAt(1);输出的是国。
- compareTo方法:比较两个字符串在字典中的大小,abc和abc等于0;abc和abd等于-1;abd和abc等于1。第一个字母比较出来后面就不用比较了。
- contains方法:输出一个布尔型数据,若前面的字符串包含后面的,就输出true。hellow.contains(ow);
- endsWith方法:输出一个布尔型数据。判断当前是以某个字符串结尾。
- equalsIgnoreCase方法:判断两个字符串是否相等,并且忽略大小写。
- getBytes方法:将字符串对象转换成字节数组。 byte [] bytes=“abc”.getBytes();
- indexOf方法:判断某个子字符串在当前字符串第一次出现的索引(下标)。“abcdjava”.indexOf(“java”);的输出结果是4.
- isEmpty方法:判断某个字符串是否为空字符串,而不是null。是空的话输出true,不是的话输出false。s=“”,s.isEmpty();结果是true。
- 判断数组长度是length属性,判断字符串长度是length方法。
- lastIndexOf方法:字符串在前字符串最后一次出现的索引。
- replace(oldchar,newchar)方法:替换字符串的方法。
- split方法:拆分字符串变成String数组。“1990-2”.split("-");变成1990,2。
- startsWith方法:判断某个字符串是否以某个子字符串开始。
- substring方法:截取字符串。substring(2)是从下标第二个开始拆。当里面输入两个参数表示开始和结束。substring(3,4)。左包含,右不包含。
- toCharArray:将字符串转换成char数组。“我是中国人”.toCharArray()。
- toLowerCase:转换成小写。
- toUpperCase:转换成大写。
- trim:去除字符串前后空白。
- String中只有一个方法是静态的,不需要new对象,valueOf方法。把不是字符串的东西转换成字符串。String s=String.valueOf(100);若里面的参数是一个对象,这个对象没有重写toString的方法,就会输出内存地址。如果重写了toString方法,就输出这个值。
- System.out.println()这个方法在输出任何数据的时候都是先转换成字符串然后打印在控制台上。
类StringBuffer字符串的拼接
字符串是不可改变的,每一次拼接都会产生一个新的字符串。占用大量的方法区的内存,造成空间浪费。
StringBuffer的底层实际上是一个byte数组。往StringBuffer中方字符串实际上就是放到byte数组中。StringBuffer的初始化容量是16。
以后拼接字符串要先创建一个byte数组,然后调用append方法,里面是想要拼接的任何数据类型,数字或者什么都可以。
如果用append追加的时候,byte数组满了,会自动扩容。
String底层和StringBuffer的底层都是一个byte数组,但是不一样的是String的数组用final修饰了,不可以扩容。
StringBuffer s=new StringBuffer(100);初始化字符串缓冲区容量。
StringBuilder也可以完成字符串的拼接。
StringBuffer和StringBulider的区别
StringBuffer的方法都有synchronized修饰的,表示在多线程环境下运行是安全的。StringBulider没有修饰,不安全。