List集合
1.List接口继承Collection接口,实现了List接口的类称为List集合。
2.在List集合中允许出现重复的元素,所有元素以线性方式进行存储,可以通过索引来访问集合中指定的元素。List集合的元素的存储顺序和取出顺序一致。
3.List不但继承了Collection接口中的全部方法,还增加了一些根据元素位置索引来操作集合的特有方法。
注意:集合不能定义为基本数据类型(int、char、float……),应该定义为包装类数据类型(Integer、String……)。
ArrayList集合和LinkedList集合的区别:
1、ArrayList集合底层是数组,而且是Object [] 类型;而LinkedList集合底层是链表。
2、ArrayList集合查询数据很快,但是增删数据很慢;LinkedList集合增删数据很快。但是查询数据很慢。
List集合中常用方法:
add(Object object):向集合中添加数据
get(int index):获取集合中指定的索引位置的元素数值
size():获取集合的长度
isEmpty():判断集合是否为空
contains(Object object);//判断结合中是否含有指定的这个元素
set(int index, Object object):更改集合中指定索引位置的元素数值
toArray():将集合转换为数组
remove(int index):删除集合中指定索引位置的元素数值
clear():清空集合元素数值,谨慎使用
ArrayList集合
1.ArrayList是List接口的一个实现类,它是程序中最常见的一种集合类;
2.在ArrayList内部封装了一个数组对象,初始长度缺省为10,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来重新容纳这些元素,因此可以将ArrayList集合看作一个长度可变的数组;
3.ArrayList集合类的大部分方法都是从父类Collection和List继承过来的,其中add()方法和get()方法用于实现元素的添加和读取。
4.ArrayList集合的内部使用一个数组来保存元素。在删除元素时,会将被删除元素之后的元素都向前移一个位置以填补空位;而在用add(intindex, Object element)方法添加元素时,是把元素插入index指向的位置,先把该位置的元素以及后续元素都向后移一个位置,如果超出数组的容量,会创建更大的新数组。因为增删元素会导致大量的内存操作,所以效率低,但ArrayList集合允许通过索引随机的访问元素,查询效率高。
5.集合和数组一样,索引的取值范围是从0开始,到size-1为止(size是集合的长度),不能超出此范围,否则会引发异常。add(Objecto)方法是把元素添加到集合的尾部,而add(intindex, Object o)是把元素添加到由索引index指定的位置。
package com.test;
import java.util.ArrayList;
import java.util.Arrays;
public class Test1 {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String[] args) {
ArrayList alist = new ArrayList();
//向集合alist中添加数据
alist.add(1);
alist.add(2);
alist.add(3);
alist.add(4);
alist.add(5.00);
alist.add(6.00);
alist.add("字符串1");
alist.add("字符串2");
alist.add('A');
alist.add('B');
int length = alist.size();//获取集合的长度
System.out.println("集合长度是:"+length);//集合长度是:10
boolean flag = alist.isEmpty();//判断集合是否为空
boolean flag2 = alist.contains(4);//判断结合中是否还有4这个数据
System.out.println("集合是否为空:"+flag);//集合是否为空:false
System.out.println("集合中是否含有数字4:"+flag2);//集合中是否含有数字4:true
Object obj = alist.get(7);//获取集合下标为7的元素值
System.out.println("集合下标为7的元素值:"+obj);//集合下标为7的元素值:字符串2
alist.set(4, "我是Hern");//更改集合下标为4的元素的值,将其修改为:我是Hern
Object[] obj2 = alist.toArray();
System.out.println("数组obj2的数值是:");
for (Object object : obj2) {
System.out.println(object);
}//输出结果是:1 2 3 4 我是Hern 6.0 字符串1 字符串2 A B
alist.remove(3);//删除集合下标为3的元素数值
// alist.clear();//清空集合,谨慎使用
System.out.println("alist集合的数值是:");
for (Object object : alist) {
System.out.println(object);
}//输出结果是:1 2 3 我是Hern 6.0 字符串1 字符串2 A B
}
}
给ArrayList集合指定类型:
package com.test;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
public class Test1 {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String[] args) {
ArrayList<String> alist = new ArrayList<>();
//向集合alist中添加数据
alist.add("字符串1");
alist.add("字符串2");
alist.add("字符串3");
alist.add("字符串4");
alist.add("字符串5");
alist.add("字符串6");
int length = alist.size();//获取集合的长度
System.out.println("集合长度是:"+length);//集合长度是:6
boolean flag = alist.isEmpty();//判断集合是否为空
boolean flag2 = alist.contains(4);//判断结合中是否还有4这个数据
System.out.println("集合是否为空:"+flag);//集合是否为空:false
System.out.println("集合中是否含有数字4:"+flag2);//集合中是否含有数字4:false
Object obj = alist.get(4);//获取集合下标为7的元素值
System.out.println("集合下标为4的元素值:"+obj);//集合下标为4的元素值:字符串5
Object[] obj2 = alist.toArray();
for(Object object : obj2) {
System.out.println(object);
}
alist.remove(2);
alist.set(3, "我是Hern");
System.out.println("alist集合的数值是:");
for (Object object : alist) {
System.out.println(object);
}//输出结果是:1 2 3 我是Hern 6.0 字符串1 字符串2 A B
}
}
LinkedList集合
1.List接口的另一个实现类LinkedList,克服了ArrayList集合在增删元素时效率较低的局限性。但是LinkedList集合的查询效率低(不支持随机访问),要查询第n个元素,必须从第一个元素开始,逐一的向后遍历,直到第n个元素。
2.该集合内部维护了一个双向链表,链表中的每个元素都通过对象引用来记住它的前一个元素和后一个元素,从而将所有的元素彼此连接起来。
3.当插入一个新元素时,只需要修改元素之间的引用关系即可,删除一个节点也是如此。LinkedList集合添加元素和删除元素的过程如下图所示:
ArrayList集合 和 LinkedList集合在进行插入的时候必须参照已有的顺序进行插入,如果插入到已存在的顺序中,将会把原有该位置的集合元素覆盖,如果插入的是在已有顺序之后的不连续位置则会运行的时候抛出异常。(例如已有的顺序为5,则不能向7中插入,可以向6中插入)。
import java.util.*;
import java.io.*;
import java.math.*;
public class Main{
public static void main(String[] args) {
LinkedList link = new LinkedList(); //创建LinkedList集合,初始为空列表
link.add("stu1");
link.add("stu2");
link.add("stu3");
link.add("stu4");
System.out.println(link.get(2)); //获取下标位置为2的元素
System.out.println(link.toString()); //打印集合中的元素
link.add(3, "Student"); //向集合指定位置插入元素,会把原来3的位置元素替换掉
link.addFirst("First"); //向集合第一个位置插入元素
System.out.println(link); //另一种方式打印集合中的元素
System.out.println(link.getFirst()); //打印第一个元素
link.remove(3); //删除索引值为3的元素
link.removeFirst(); //删除第一个元素
System.out.println(link);
/*运行结果是:
stu3
[stu1, stu2, stu3, stu4]
[First, stu1, stu2, stu3, Student, stu4]
First
[stu1, stu2, Student, stu4]
*/
}
}