1.常用API(String和ArrayList)
String
创建字符串对象的方式
- 通过
“ ”创建对象‘- String s=“love”;
 
 - 通过构造器创建对象 
  
- new string
 
 - 用字符数组来创建字符串对象 
  
- char[] chars={‘a’,‘b’,‘中’,‘国’};
 - String s1=new String(chars);
 
 - 字节数组来创建字符串对象 
  
- btye[ ] bytes={97,98,99,65,66}
 - String s2=new String(bytes);
 
 - 通过
" "和用构造器来创建对象有何区别?- 使用第一种方式: 
    
- 以
" "方式创建对象,在字符串常量池中存储相同内容只会在其中存储一份 - 通过构造器new对象,每new一次都会产生一个新的对象,放在堆内存中
 
 - 以
 - 或者使用第二种方式: 
    
- 双引号创建的字符串对象,在字符串常量池中存储同一个
 - 通过new构造器创建的字符串对象,在堆内存中分开存储
 
 
 - 使用第一种方式: 
    
 
String常用API
- 比较两个值是否相等: 
  
==判断地址是否相同,equails判断内容是否相同
 - 计算字符串的长度: 
  
- s.length() ====>4
 
 - 截取字符串的某一个字符: 
  
- s.charAt(1) ====>o
 
 - 把字符串转换成字符数组: 
  
- char[] chars=s.tocharArray() ====>{‘l’,‘o’,‘v’,‘e’};
 
 - 截取一段内容(包括前不包括后) 
  
- s.substring(0,3) ====>lo
 
 - 从当前索引一直取到末尾: 
  
- s.substring(2) ====>ve
 
 - 进行替换 
  
- s.replace(“ov”,"***"); ====>
l***e 
 - s.replace(“ov”,"***"); ====>
 - 判断是否包含: 
  
- s.contains(“ov”) ====>false,因为上一步已经进行了替换
 
 - 以…开始 
  
- s.startswith(“l*”); ====>true
 
 - 将字符串分割成字符串数组返回 
  
- name1=“1,2,3,4”;
 - name1.split(",");
 
 
ArrayList集合
特性:
- 集合是大小不固定,可以动态变化的,,,,,数组类型确定,长度确定
 - 并且元素是可以重复的,元素存在索引
 - 存储在堆内存中
 
ArrayList集合常用API
-  
ArrayList的创建:
- ArrayList list=new ArrayList();
 
 -  
添加数据:
- list.add(“java”); 可重复添加数据
 
 -  
获取数据:
- list.get(0); 获取下标为0的数据
 
 -  
指定索引添加数据:
- list.add(1,“java”); 指定索引添加数据,如果改位置已经有数据,则该位置及其以后的数据都将向后移动
 
 -  
ArrayList,其中的E为指定的泛型
 -  
带泛型的创建:
- ArrayList list1=new ArrayList<>();
 
 -  
获取集合的大小:
- list1.size
 
 -  
删除下标为n的数据:
- list.remove(n)
 
 -  
根据具体值进行删除:
- list.remove(“mybatis”);
 - 如果其中有相同的元素,将删除第一次出现的元素
 - 返回true或false
 
 -  
根据下标替换:
- list.set(0,”咿呀咿呀哟“) 将下标为0的元素,替换为咿呀咿呀哟
 
 -  
注意:
- 集合和泛型都不支持基本数据类型,只能支持引用数据类型Object
 
 
贴心面经
remove注意:
for(int i = 0 ; i< scores.size() ; i++){
   int score=scores.get(i);
    	if(score<80){
            score.remove(i);
        }
}
system.out.println("scores");
 
这样会出现一个问题有的元素会被漏删除
此程序的主要目的是将小于80分的成绩进行删除,假设score中存放的是{89,45, 65, 79,92},则在程序执行后会输出{89,65,92},显然可以看出有一些需要被删除的数据没有被删除。
- 为什么会出现漏删的问题呢?
 
此循环在遍历时,是通过指针变量控制进行循环的,指针变量在第一次比较时处在下标为0的位置,再进行数值的比较,89不小于80,指针变量移动到下标为1的位置,进行判断,45小于80,将会进入if判断的内部,会被remove掉,在被删除后,后面的65, 79,92这些元素会自动向前移动,此时集合会变成{89,65, 79,92},指针接着向下一个位置移动,将79带入进行的条件判断,79小于80,这样79就会被移除,其他元素自动向前移动,此时集合变为{89,65,92},这样65即使不符合条件,也会被跳过,所以有了漏删的现象。
总结一下:因为在删除元素比较时,前者符合条件,被删除了。后面的元素会自动移动到它的前一个位置,指针指向的位置移动到下一个元素的位置,所以会有漏删的问题。
-  
那么增么解决这一个问题呐?
-  
方案一:
-  
将i在if语句中进行i–;
 -  
修改后的代码:
for(int i = 0 ; i< scores.size() ; i++){ int score=scores.get(i); if(score<80){ score.remove(i--); } } system.out.println("scores"); 
 -  
 -  
方案二:
-  
倒序遍历
 -  
修改后的代码:
for(int i = scores.size() ; i>=0 ; i++){ int score=scores.get(i); if(score<80){ score.remove(i); } } system.out.println("scores"); 
 -  
 
 -  
 










