ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java扩展之part01 常用API(String和ArrayList)

2022-01-17 10:34:48  阅读:139  来源: 互联网

标签:Java String part01 ArrayList score scores 字符串 new


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.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");
        

标签:Java,String,part01,ArrayList,score,scores,字符串,new
来源: https://blog.csdn.net/qq_56594964/article/details/122534379

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有