1.字符串拼接的底层原理
①.字符拼接时候没有变量,都是字符串,就会触发字符串的优化机制。在编译的时候就已经是最终结果了。
②.字符拼接的时候有变量,JDK8以前会使用StringBuilder进行拼接。append添加元素,toString在将StringBuilder中的内容转变为字符串。
<往往一个+号就会生成两个对象,一个是StringBuilder对象,一个是toString对象------>浪费空间和时间>
③.如果有很多字符串拼接,不要直接+。在底层会创建多个对象,浪费时间以及性能。
④.所有要拼接的内容都会往StringBuildilder中放,不会创建很多无用的空间,节约内存。
⑤.StringBuilder 1.默认创建一个长度为16的字节数组。
2.添加的内容长度小于16,直接存。
3.添加的内容大于16会扩容(原来的容量*2+2)。
4.如果扩容之后还不够,以实际长度为准。
2.调整字符串内容并比较
public class Main {
public static void main(String[] args) {
String str1 = "efgabd";
String str2 = "abdefg";
boolean flag=reverse(str1,str2);
System.out.println(flag);
}
public static boolean reverse(String str1,String str2) {
for (int i = 0; i <str1.length() ; i++) {
str1=checkstr(str1);
if(str1.equals(str2)){
return true;
}
}
return false;
}
public static String checkstr(String str1) {
char first=str1.charAt(0);
String end=str1.substring(1);
return end+first;
}
}
2.罗马数字抓换为数字
思路是对的,查表法,但是代码写成一坨,复用性差。应该定义为各种方法,所以一有报错整个就崩盘了,加油吧,要写的要学的东西还很多。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("请输入一串位数小于9的数字:");
Scanner sc=new Scanner(System.in);
String num=sc.next();
for (int i = 0; i <num.length() ; i++) {
char c=num.charAt(i);
if(c<'0' || c>'9'||num.length()>9||num.length()<0){
System.out.println("输入的数字不合法,请重新输入!");
num=sc.next();
}
}
StringBuilder sb=new StringBuilder(num);
num=sb.reverse().toString();
int num1=Integer.parseInt(num); //将String类型转换为int类型
do {
int ge = num1 % 10;
num1 = num1 / 10;
String result = "";
result = result + " "+Luoma(ge);
System.out.print(result+"");
}while (num1>0);
}
public static String Luoma(int num) {
String[] arr={"","I","II","III","IV","V","VI","VII","VIII","IX"};
return arr[num];
}
}
3.集合基础(增删改查)
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//创建一个集合
ArrayList<String> list=new ArrayList<>();
//添加元素
list.add("aaa");
list.add("bbb");
list.add("eee");
//删除元素
boolean result=list.remove("aaa");
System.out.println("删除元素结果:"+result);
String str= list.remove(0);
System.out.println("删除第一个元素:"+str);
//修改元素
String str1= list.set(0,"ccc");
System.out.println(str1);
//查询元素
String str2= list.get(0);
System.out.println(str2);
System.out.println("======");
//遍历集合
for(String s:list){
System.out.println(s);
}
for (int i = 0; i <list.size() ; i++) {
String str3=list.get(i);
System.out.println(str3);
}
System.out.println("]");
}
}
4.集合是可变长度的,可添加引用数据类型,添加基本数据类型时需要将引用数据类型打包。运用包装类,比如int---->Integer
5.小练习
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//创建一个集合
ArrayList<Students> list=new ArrayList<>();
//创建学生对象
Students s1=new Students("张三",2024001,"123456");
Students s2=new Students("李四",2024002,"yzl123456");
Students s3=new Students("王五",2024003,"y123456");
//添加学生到集合
list.add(s1);
list.add(s2);
list.add(s3);
int result= find(list,2024001);
System.out.println(result);
}
//查找对象
public static int find(ArrayList<Students>list,int id){
//遍历集合
for (int i = 0; i <list.size() ; i++) {
Students stu=list.get(i);
if(stu.getId()==id){
return i;
}
}
return -1;
}
}
按照条件进行筛选
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
//创建一个集合
ArrayList<Phone> list=new ArrayList<>();
//创建学生对象
Phone s1=new Phone("小米",9000);
Phone s2=new Phone("苹果",2000);
Phone s3=new Phone("锤子",2999);
//添加学生到集合
list.add(s1);
list.add(s2);
list.add(s3);
ArrayList<Phone> phoneinfoList= find(list);
for (int i = 0; i < phoneinfoList.size(); i++) {
Phone phoneinfo=phoneinfoList.get(i);
System.out.println(phoneinfo.getBrand()+" "+phoneinfo.getPrice());
}
}
//查找对象
public static ArrayList<Phone> find(ArrayList<Phone>list) {
//定义集合存储价格低于3k的对象
ArrayList<Phone> resultlist=new ArrayList<>();
//遍历集合
for (int i = 0; i < list.size(); i++) {
Phone phone = list.get(i);
if (phone.getPrice() < 3000) {
resultlist.add(phone);
}
}
return resultlist;
}
}