集合List内容
这次我们学习的主要内容为:集合框架 List
一 集合框架介绍
List集合与数组的区别:
不同点:1> 数组的长度在使用前必须确定,一旦确定不能改变。而List集合长度可变,无须定义。
2> 数组中必须存放同一数据类型的数据,List集合中可以存放不同类型的数据。
数组举例:String[] name=new String[5];
二 List集合的常用方法
返回类型 |
方法名称 |
说明 |
boolean |
add(Object obj) |
加入元素,返回是否添加成功 |
void |
clear() |
清除集合中的元素 |
boolean |
contains(Object obj) |
查找集合中是否存在传入的元素 |
Object |
get(int index) |
获取指定位置的元素 |
boolean |
isEmpty() |
判断集合是否为空 |
Object |
Remove(int index) |
删除指定位置的元素,并返回该元素 |
int |
size() |
获取集合的大小 |
Object[] |
toArray() |
将集合转换成数组 |
注意:保存基本类型时用到了装箱拆箱;保存对象应重写equals方法。
数组操作:
package com.huizhong;
public class ArrayDemo {
public static void main(String[] args) {
String[] array=new String[3];
for (int i = 0; i < 3; i++) {
array[i]="hello";
}
String str=array[0];
System.out.println(str);
}
}
List集合:
package com.huizhong;
import java.util.*;
public class ListDemo {
public static void main(String[] args) {
ArrayList list=new ArrayList();
for (int i = 0; i < 3; i++) {
list.add("hello");
String str=(String) list.get(0);
System.out.println(str);
}
}
}
未重写equals前
package com.huizhong;
import java.util.*;
public class Demo {
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add(new Student("tom",15));
list.add(new Student("carry",35));
list.add(new Student("hamoey",20));
System.out.println(list);
}
}
package com.huizhong;
class Student {
String stuName;
int stuAge;
public Student(String stuName,int stuAge){
this.stuName=stuName;
this.stuAge=stuAge;
}
}
输出结果:
重写equals后:
package com.huizhong;
import java.util.*;
public class Demo {
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add(new Student("tom",15));
list.add(new Student("carry",35));
list.add(new Student("hamoey",20));
System.out.println(list);
}
}
package com.huizhong;
class Student {
String stuName;
int stuAge;
public Student(String stuName,int stuAge){
this.stuName=stuName;
this.stuAge=stuAge;
}
}
输出结果:
三 List集合实际上包含了3个常用的集合类,即ArrayList,Vector和LinkedList。
ArrayList采用数组保存元素,意味着当大量添加元素,数组空间不足时,依然需要通过新建数组,内存复制的方式来增加容量,效率较低;而当进行对数组进行插入,删除操作时,又会进行循环移位操作,效率也较低;只有进行按下标查询时(get方法),使用数组效率很高。
Vector与ArrayList的内部实现相似,Vector设计为线程安全,ArrayList设计为非线程安全。为了保证线程安全,Vector在性能方面稍逊于ArrayList,目前我们编写的都是单线程应用程序,应选择使用ArrayList。
ArrayList与LinkedList均设计为非线程安全,ArrayList内部采用数组实现(与Vector相同),LinkedList内部采用链表结构实现。
LinkedList采用链表保存元素,在添加元素时只需要进行一次简单的内存分配即可,效率较高;进行插入,删除操作时,只需对链表中相邻的元素进行修改即可,效率也很高;但进行按下标查询时,需要对链表进行遍历,效率较低。
学习了这章的内容后,我们就会深有体会,在存多个用户的信息时给我们提供了很多的便利,比数组好用多了,因此我们要灵活的掌握它,我们学习时要多总结,多比较,理解其特性,将他学会学懂.