创建字符串对象的方式
“ ”
创建对象‘
" "
和用构造器来创建对象有何区别?
" "
方式创建对象,在字符串常量池中存储相同内容只会在其中存储一份==
判断地址是否相同,equails
判断内容是否相同l***e
特性:
ArrayList的创建:
添加数据:
获取数据:
指定索引添加数据:
ArrayList,其中的E为指定的泛型
带泛型的创建:
获取集合的大小:
删除下标为n的数据:
根据具体值进行删除:
根据下标替换:
注意:
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");