java中使用List<String>集合,然后我remove(0)了第一个元素后,为什么下次读到的不是下一个元素

作者&投稿:禽净 (若有异议请与网页底部的电邮联系)
java中为什么list集合remove()可以弹出,而set只能删除?~

就remove()这个方法来说,list有两个,重载形式,set只有一个!

你所说的弹出,是list在接受int类型的情况,会弹出被删除的对象!
这个功能只有list有,为什么有?
list底层是数组,数组你知道当然可以接受指定下标了,set也很想有这样的功能,但是它没有
set底层是数据结构不一样,没办法去指定下标啊,功能肯定是越多越好了!

////////////////that's mineimport java.util.*;public class StudentSorter{public static void main(String [] as){
Student a = new Student("a", 80);
Student b = new Student("b", 90);
Student c = new Student("c", 70);
List list = new ArrayList();
list.add(a);
list.add(b);
list.add(c);
System.out.println("未修改前:");
for(Student s: list){
System.out.println(s);
}
a.setMark(100);
list.set(0, a);
System.out.println("已修改后:");
for(Student s: list){
System.out.println(s);
}}}class Student implements Comparable{private String name;
private int mark;public Student(){}public Student(String n, int m) {
name = n;
mark = m;
}public void setMark(int m){
mark = m;
}public int getMark(){return mark;
}public int compareTo(Object o) {
if(o instanceof Student) {
Student s = (Student)o;
return s.getMark() - this.getMark();
} else {
return -1;
}}public String toString(){
return name + ": " + mark;
}}
做法就是上面的。

扩展资料:java中ArrayList用法详解
基本的ArrayList,长于随机访问元素,但是在List中间插入和移除元素时较慢,并且ArrayList的操作不是线程安全的。
一般在单线程中才使用ArrayList,而在多线程中一般使用Vector或者CopyOnWriteArrayList。
1、使用ArrayList 简单的例子:
ArrayList a=new ArrayList();
for(int i=0; i<n; i++){
a.add(sc.nextInt()); //为数组增加int型数
}
a.remove(0);//删除第一个元素;
m=2;
a.add(m); //在数组末尾添加
a.add(4,2);// 在指定位置添加元素,在第5个位置添加2
a.remove(2); // 删除指定位置上的元素
a.remove((Object)3); // 删除指定元素
a.clear(); // 清空ArrayList
System.out.println("ArrayList contains 5 is: " + a.contains(5));// 判断arrayList是否包含5
System.out.println("ArrayList is empty: " + arrayList.isEmpty()); // 判断ArrayList是否为空
2、toArray用法
有时候,当我们调用ArrayList中的 toArray(),可能遇到过抛出java.lang.ClassCastException异常的情况,
这是由于toArray() 返回的是 Object[] 数组,将 Object[] 转换为其它类型(如,将Object[]转换为的Integer[])则会抛出java.lang.ClassCastException异常,因为Java不支持向下转型。
所以一般更常用的是使用另外一种方法进行使用:
T[] toArray(T[] a)
调用toArray(T[] a)返回T[]可通以下方式进行实现:
// toArray用法
// 第一种方式(最常用)
Integer[] integer = arrayList.toArray(new Integer[0]);
// 第二种方式(容易理解)
Integer[] integer1 = new Integer[arrayList.size()];
arrayList.toArray(integer1);
// 抛出异常,java不支持向下转型
//Integer[] integer2 = new Integer[arrayList.size()];
//integer2 = arrayList.toArray();
ArrayList a = new ArrayList();
实例:
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo {
public static void main(String[] srgs){
ArrayList arrayList = new ArrayList();
System.out.printf("Before add:arrayList.size() = %d
",arrayList.size());
arrayList.add(1);
arrayList.add(3);
arrayList.add(5);
arrayList.add(7);
arrayList.add(9);
System.out.printf("After add:arrayList.size() = %d
",arrayList.size());
System.out.println("Printing elements of arrayList");
// 三种遍历方式打印元素
// 第一种:通过迭代器遍历
System.out.print("通过迭代器遍历:");
Iterator it = arrayList.iterator();
while(it.hasNext()){
System.out.print(it.next() + " ");
}
System.out.println();
// 第二种:通过索引值遍历
System.out.print("通过索引值遍历:");
for(int i = 0; i < arrayList.size(); i++){
System.out.print(arrayList.get(i) + " ");
}
System.out.println();
// 第三种:for循环遍历
System.out.print("for循环遍历:");
for(Integer number : arrayList){
System.out.print(number + " ");
}
// toArray用法
// 第一种方式(最常用)
Integer[] integer = arrayList.toArray(new Integer[0]);
// 第二种方式(容易理解)
Integer[] integer1 = new Integer[arrayList.size()];
arrayList.toArray(integer1);
// 抛出异常,java不支持向下转型
//Integer[] integer2 = new Integer[arrayList.size()];
//integer2 = arrayList.toArray();
System.out.println();
// 在指定位置添加元素
arrayList.add(2,2);
// 删除指定位置上的元素
arrayList.remove(2);
// 删除指定元素
arrayList.remove((Object)3);
// 判断arrayList是否包含5
System.out.println("ArrayList contains 5 is: " + arrayList.contains(5));
// 清空ArrayList
arrayList.clear();
// 判断ArrayList是否为空
System.out.println("ArrayList is empty: " + arrayList.isEmpty());
}
}
/**
Before add:arrayList.size() = 0
After add:arrayList.size() = 5
Printing elements of arrayList
通过迭代器遍历:1 3 5 7 9
通过索引值遍历:1 3 5 7 9
for循环遍历:1 3 5 7 9
ArrayList contains 5 is: true
ArrayList is empty: true
*/

因为你删除了元素,但是未改变迭代的下标,这样当迭代到最后一个的时候就会抛异常咯。

可以对上面的程序进行如下改进:
for(int i = 0 , len= list.size();i<len;++i){

if(list.get(i)==XXX){

list.remove(i);
--len;//减少一个
}

}
List接口内部实现了Iterator接口,提供开发者一个iterator()得到当前list对象的一个iterator对象。(一般都用这种)


a字头的英文昵称
1. Ava: This romantic English nickname, starting with the letter "A," means "bird" and also conveys confidence and resilience. Many girls choose this English name to reflect their personality, such as the well-known Chinese actress Wang Ziwen, who has also adopted it as her Engl...

我叫杨琳琦 请问有比较合适我的英文名吗
Ava ['vln]中文谐音: 埃娃 解释: 呼吸生命 英文变体:Ava;Avabel;Avabella;Avabelle;Avabeth;Avabriella;Avabrielle;Avadean;Avaden;Avah Alexis ['leksis]中文谐音: 亚历克西斯 解释: 保护者 英文变体:Ale;Alea;Aleah;Aleaha;Alean;Aleandro;Aleanor;Alease;Aleasha;Aleashia Amber ['mbr...

昆雅语的语法
在昆雅语,它的使用法有时和离格相互重叠,亦用以标明形容词性名词或所有格(物的拥有者的标明)。3.宾格用以标明动词的宾语,在口语中已和主格混合,因而不再使用,但“古典”或“书面”的昆雅语中,宾格和主格依旧有区别。4.工具格用以标明做为动作手段或工具的名词。三个副词性的格:1.向格用以标明动作所趋向的...

主语人称代词及用法
*以Que构成的只能用第一、第三种。 Que lit son ami? *主语为名词,又无疑问词,只能用第二、三种。 La salle de lecture est-elle grande? *若疑问词带有介词,介词一定要放在疑问词前。 Avec qui parle l'étranger? (Who is the foreigner talking with?) GRAMMAIRE I形容词 法语中形容词一般放在名词后面...

求一个好听的英语名字!
详情请查看视频回答

石炭纪 (豫南小区)
该组合中主要分子有Calamospora atava,Punctatisporites famenensis,Cyclogranisporites maximus,Aneurospora greggsii,Retusotriletes furcatus,Lacvigatosporites sp.,Retispora lepidophyta等,时代为晚泥盆世,所在岩石地层单位为花园墙组下部,相当于花园墙剖面第1~19层。(2)Dibolisporites distinct...

漏字文的全字母与漏字文
从某种意义上,全字母句是漏字文(英语Lipogram)的对立物,因为后者在文章中有意不使用一个或几个特定字母。 *Howrazorback-jumpingfrogscanlevelsixpiquedgymnasts!(49个字母)(被Macintosh,System7用于字体范例)*CrazyFrederickaboughtmanyveryexquisiteopaljewels.(48个字母)*Sixtyzipperswerequicklypickedfromthewovenjutebag...

花山区18913064060: 我要在java中定义list
可菊优普: List&lt;Student &gt; list= new ArrayList&lt;Student &gt;(); Student s= new Student(); list.add(s) // 循环存、、、 Iterator it = list.iterator(); if(it.hasNext()){ for(int i= 0; i&lt;list.size(); i++){ Student s=(Student) list.get(it.next()); } } //循环取

花山区18913064060: JAVA中的List的使用 -
可菊优普: List([]内的内容可省略),与数组类似: 实例化:List[] list = new ArrayList[](); 获得集合内元素个数:list.size(); 添加元素: 默认添加:list.add(e); 指定下标添加(添加后下标后的元素向后挪一位):list.add(index,e); 删除元素: 返回是...

花山区18913064060: java使用List把字符串中每个字母分别保存在数组中
可菊优普: 如: String str = "abcd"; List list = new ArrayList(); char[] cr =str.toCharArray(); for(int i=0;i&lt;cr.length;i++){ list.add(cr[i]); } //输出list中保存的字符 for(int j=0;j&lt;list.size();j++){ System.out.println(list.get(j)); }

花山区18913064060: java找出list重复数据
可菊优普: List&lt;Student&gt; newList = new ArrayList&lt;Student&gt;(); for(Student stu:StuList){ if(stu.getXXX 和某个值相等){ newList.add(stu); } } newList存放结果

花山区18913064060: java中为什么不能实例化List类呢??如:List<Student> stus=new List<Student>();报错,不能实例化List
可菊优普: 你好 List是接口,接口不能直接实例话,只能实例化其子类 List<Student> stus=new ArrayList<Student>(); 希望对你有帮助

花山区18913064060: java 中返回值和传入参数中的 像List<T>和 List<?>这样的类型怎么理解?请详细解答!
可菊优普: List&lt;?&gt;表示任何类型都可以,但是由于类型不能确定,所以如果你要操作add之类是会报错的,因为他不能确定你现在添加的类型是不是符合List要求的类型,,所以你要转化, 如:List&lt;?&gt; list=new ArrayList&lt;String&gt;(); List&lt;String&gt; list2=(List&lt;String&gt;)list; List&lt;T&gt;一般是指特定的类型才可以,比如class实现某一接口itf&lt;T&gt;,那么对应的下面的所有T都是一个意思 这些一般都是放在方法或者接口之类的上面以利于引用

花山区18913064060: java 数据库操作 list使用 -
可菊优普: 创建一个vo对象类,其中属性有class_No,student_Name,teacher_Name,st_No list使用泛型存储创建的对象类.将jdbc得到的值通过set属性方法给创建的对象赋值然后存放在list中.再使用的时候遍历list拿到对象,通过get属性方法即可.

花山区18913064060: java中的接口list -
可菊优普: 这么写是为了以后扩展的方便.List list = new ArrayList();的话,这个list就只能使用List接口的方法了;ArrayList list = new ArrayList();的话,这个list除了能使用List接口的方法外,还能使用ArrayList特有的方法.但是,如果有一天,在原...

花山区18913064060: 请教Java集合中List的用法
可菊优普: 你的第一种使用方式是JDK1.5才有的书写方式,叫泛型. 这确实和JDK的版本有关的.JDK1.5以前的版本(不包括1.5版本)是不支持的.如果你使用了JDK1.4的编译器,那么你的第一句是不能被编译通过的. 当你使用第一种方式书写时.那么,list中就必须储存String类型的数据.而不能储存别的类型数据了.当你使用后面的这种书写方式时,就没有类型限制了. 不过,推荐使用第一种方式,这样代码的可读性和以后的维护会比较方便. 希望对比有帮助.

花山区18913064060: java里面使用泛型的优点
可菊优普: 使用泛型之后,集合类取数据时就不需要对存储的数据进行强制类型转换.也避免了一些异常的出现.例如List&lt;String&gt; list=new ArrayList&lt;String&gt;();list.add("123");String str=list.get(0);如果不适用泛型就是这样.List list=new ArrayList();list.add(123);String str=(String)list.get(0);如果这样就会出现类型转换的异常.java.lang.Integer cannot be cast to java.lang.String

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网