搜索
您的当前位置:首页正文

JAVA集合之List列表深刻总结案例附上解释跟总结

来源:意榕旅游网
 一.ArrayList实例

实例1:ArrayListDemo1 /**

Java集合系列之List列表学习总结

* 总结:

* 1.用两种方法遍历ArrayList去遍历集合:for循环get(index);Iterator迭代器方法遍历,首先取得遍历器Iterator iterator=list.iterator();调用hasNext(),next(). * 2.集合中泛型的应用。 */

package List列表;

import java.util.ArrayList;//关于ArrayList的用法问题:若是基本类型跟应用类型一起存放的时候,如何?

import java.util.Iterator;

public class ArrayListDemo1 {

public static void main(String[] args){

ArrayList list =new ArrayList();//泛型的用法

ArrayList list1 =new ArrayList();//无泛型的用法

Person p1=new Person(\"李小川\ Person p2=new Person(\"李四\ Person p3=new Person(\"李五\ list.add(p1); list.add(p2); list.add(p3); list1.add(\"添加了字符串\"); list1.add(111); list1.add(333); list1.add('a'); list1.add((byte) 3); list1.remove((Integer)111);//括号里面要求的是对象,所以需要进行强转 list1.remove((Character)'a'); list1.remove((Byte)(byte)3);//先把整型的转换成字符型,在转换成字节引用类型 //有两种方法遍历,一种利用for循环中get(index) /* for(int i=0;i iterator=list.iterator();//声明集合的时候用泛型,要求取得迭代器的

时候也得用泛型,只有是该类型的迭代器才可以迭代的。 while(iterator.hasNext()){ Person p=iterator.next();//注意这里要是没有使用泛型的话,则需要进行强制转换。Person p=(Person)iterator.next(); //下面的语句要注意,因为iterator.next();取了三次,变成了取了三个对象。 //错误写法:System.out.println(\"姓名:\"+iterator.next().getname()+\"\\"+\"学号:\"+iterator.next().getno()+\"\\"+\"分数:\"+iterator.next().getscore()); System.out.println(\"姓名:\"+p.getname()+\"\\"+\"学号:\"+p.getno()+\"\\"+\"分数:\"+p.getscore());//这个是按顺序输出的 } Iterator iterator1=list1.iterator();//对于集合中没有引用类型的时候可以这样去遍历,无需判断类型,java对于基本类型自动分装拆箱。 while(iterator1.hasNext()){ System.out.println(iterator1.next()); }

Object[] object1=list1.toArray();//集合转换成对象数组,必须是对象数组 for(int i=0;iSystem.out.println(object1[i]);//数组没有get()这个方法,这个方法只有集合有。 } } }

class Person{ String name; int no; int score; public Person(String name,int no,int score){ this.name=name; this.no=no; this.score=score; } public void setname(){ this.name=name; } public void setno(){ this.no=no; } public void setscore(){ this.score=score; } public String getname(){

}

return name; }

public int getno(){ return no; }

public int getscore(){ return score; }

案例2. ArrayListDemo2 /**

* 总结:如果集合中既存放了基本类型,又存放了引用类型的数据,那该怎么遍历呢? * 解决办法:不管是for循环遍历还是迭代器Iterator遍历,都是可以的。用到的关键字是instanceof进行判断是什么类型的数据,从而进行遍历。

* 需要注意的是迭代器遍历,iterator.next(),出现一次便遍历下一个,所以一般得用变量替换。Object object=iterator.next(); */

package List列表; import java.awt.List;

import java.util.ArrayList;//关于ArrayList的用法问题:若是基本类型跟应用类型一起存放的时候,如何?

import java.util.Iterator;

public class ArrayListDemo2 {

public static void main(String[] args){ ArrayList list =new ArrayList();//泛型的用法 Person5 p1=new Person5(\"李川\ Person5 p2=new Person5(\"李四\ Person5 p3=new Person5(\"李五\ list.add(p1);

list.add(new Integer(111)); list.add(new Float(22.2f)); list.add(new Integer(333)); list.add(new Character('a')); list.add(null); list.add(new String(\"记住用for循环遍历不同类型\")); list.add(p2); list.add(p3); list.remove((Character)'a'); list.remove((Float)22.2f);//移除的是对象,所以括号里面是对象,不能是基本类型,需要强转为对象 list.remove(\"记住用for循环遍历不同类型\");//String本身就是一个对象

Iterator iterator=list.iterator(); while(iterator.hasNext()){

Object object=iterator.next(); // if(object instanceof Person5){ // Person5 p=(Person5) object; // System.out.println(p); // //System.out.println(\"姓名:\"+p.getname()+\"\\"+\"学号:\"+p.getno()+\"\\"+\"分数:\"+p.getscore()); // } // else if(object instanceof Integer){ // System.out.println(object); // } // else System.out.println(object); }

// for(int i=0;iclass Person5{ String name; int no; int score; public Person5(String name,int no,int score){ this.name=name; this.no=no; this.score=score; } public Person5(int no,int score){ this.no=no; this.score=score; } public Person5(String name){

学 this.name=name; }

public void setname(){ this.name=name; }

public void setno(){ this.no=no; }

public void setscore(){ this.score=score; }

public String getname(){ return name; }

public int getno(){ return no; }

public int getscore(){ return score; }

//toString方法的总结:要是引用对象有重写了输出对象的格式,则当遍历输出每一个对象的时候,会自动调用每一个对象对应的toString的方法; public String toString() {//重写toString方法,输出对象的时候按照重写的形式去输出,否则输出的是Person@2b0a141e形式。对于基本类型的则不要,直接输出值 return \"姓名:\"+this.name+\年龄:\"+this.score; } } 总结:

package List列表; /**ArrayList的特点:

* ①ArrayList实现了可变大小的数组。它允许所有元素,包括null。 * ②ArrayList存储的元素都是有序的,允许存放重复的元素。 * ③线程不同步 *

* 一.首先java集合不支持存放基本类型的,只能存放引用类型的对象。但是真的不可以存放基本类型数据吗?当然不是,java系统可以实现自动分装。

* 当你要对基本数据类型进行操作的时候,比如删除remove(object),可以通过强转,变成引用对象类型。八个基本类型都有对应的引用类型。 * int------>Integer(4) * char----->Character(2) * short---->Short(2)

* float---->Float(4) * double--->Double(8) * long----->Long(8) * byte----->Byte(1) * boolean-->Boolean

* 例子:remove((Integer)3); *

*************************************************************************** 二.LinkedList实例 案例1LinkedListDemo1 package List列表; /**

* 这个例子遍历的都是基本类型的数据,所以一般不用到泛型就可以解决的。 */

import java.util.Iterator; import java.util.LinkedList;

public class LinkedListDemo1 {

LinkedList list = new LinkedList(); list.add(100); list.add(\"china\"); list.add(true); list.add(3.14); list.add(\"china\");

System.out.println(\"-------使用for循环遍历--------\"); for(int i=0;iSystem.out.println(\"-------使用迭代器遍历--------\"); Iterator it = list.iterator(); while(it.hasNext()) { }

System.out.println(\"----------------------\");

list.addFirst(\"西安\");//给链表添加第一个元素

System.out.println(it.next());

//序列是有序,打印出来的次序和添加的次序完全一致。 System.out.println(list.get(i));

public static void main(String[] args) {

}

}

list.addLast(\"北京\");//给链表尾部添加元素 it = list.iterator(); while(it.hasNext()) { }

System.out.println(\"----------------------\");

//System.out.println(list.getFirst());

System.out.println(list.pop());//弹出栈顶元素,移除第一个元素,此时栈顶元System.out.println(\"----弹出之后----\"); System.out.println(list.getFirst()); it = list.iterator(); while(it.hasNext()) { }

System.out.println(it.next()); System.out.println(it.next());

//System.out.println(list.peek());//获取栈顶元素,不移除第一个元素

素变成了第二个

案例2LinkedListDemo2 package List列表; /*

* 这是当集合存放了不同的数据类型跟引用数据类型的时候,如何遍历,用到了泛型,同时比较了for循环和迭代器两种方式。 */

import java.util.Iterator; import java.util.LinkedList;

public class LinkedListDemo2 { public static void main(String[] args) { Student student1=new Student(\"李安魂\ Student student2=new Student(\"陈明\ LinkedList list = new LinkedList(); list.add(100); list.add(\"china\"); list.add(true); list.add(3.14); list.add(\"china\");

list.add(student1); list.add(student2);

/*for(int i=0;i//序列是有序,打印出来的次序和添加的次序完全一致。 if(object instanceof Student) System.out.println(((Student) object).getName()+\" object).getAge()); else System.out.println(list.get(i)); }*/ System.out.println(\"-------使用迭代器遍历--------\"); Iterator it = list.iterator(); while(it.hasNext()) { Object object=it.next(); if(object instanceof Student) System.out.println(((Student) object).getName()+\" object).getAge()); else System.out.println(object);//表示基本类型的输出。 } System.out.println(\"----------------------\"); list.addFirst(\"西安\");//给链表添加第一个元素 list.addLast(\"北京\");//给链表尾部添加元素 it = list.iterator(); while(it.hasNext()) { System.out.println(it.next()); } System.out.println(\"----------------------\");

//System.out.println(list.peek());//获取栈顶元素 //System.out.println(list.getFirst()); System.out.println(list.pop());//弹出栈顶元素 System.out.println(\"----弹出之后----\"); it = list.iterator(); while(it.hasNext()) { System.out.println(it.next()); }

}

}

\"+((Student)

\"+((Student)

class Student{ String name; int age; public Student(String name,int age){ this.name=name; this.age=age; } public void setName(String name){ this.name=name; } public void setAge(int age) { this.age=age; } public String getName(){ return name; } public int getAge(){ return age; } }

总结:

package List列表; /**LinkedList特点:

* ❶LinkedList 实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在 LinkedList的首部或尾部。 * ❷也是顺序存储,允许重复元素,null元素。 * ❸线程不同步。 *

* LinkedList是通过链表实现的,遍历方法跟ArrayList差不多,只是效率有区别。 * 具体的使用方法有微小的差别,可以通过api去发现。 */

因篇幅问题不能全部显示,请点此查看更多更全内容

Top