List集合在java.util包下,List集合也有
List集合是一个接口,继承了Collection
List集合被称为有序集合,也称为序列。用户可以精确的控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素 简单理解就是List集合是有索引的
与后面要学的set集合不同,列表通常允许重复的元素
总结: List集合的特点如下 1、有序。存储和取出的元素顺序一致 2、可重复。存储的元素可以重复
集合概述和特点的练习
xxxxxxxxxx
package ch14;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class a_6_1测试 {
public static void main(String[] args) {
//创建集合对象
List<String> list = new ArrayList<String>();
//添加元素
list.add("hello");
list.add("world");
list.add("java");
list.add("java");
//输出集合对象
//下面那行输入的不是地址值,说明toString方法被重写了
System.out.println(list); //输出[hello, world, java,java]
System.out.println("--------------");
//使用迭代器的方式遍历List集合。collection的方法这里可以用
Iterator<String> it = list.iterator(); //这里不解释了,还不懂就去‘a_5_2测试’和‘a_4_1测试’里面再学一下
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}
}
}
List集合的特有方法
方法名 | 说明 |
---|---|
void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
E get(int index) | 返回指定索引处的元素 |
对于List集合,我们遍历时不仅可以使用前面collection集合的迭代器来实现遍历。还可以通过索引获取到指定索引处的元素实现对集合的遍历
List集合特有方法的练习
xxxxxxxxxx
package ch14;
import java.util.ArrayList;
import java.util.List;
public class a_7_1测试 {
public static void main(String[] args) {
//创建集合对象
List<String> list = new ArrayList<>();
//添加元素
list.add("hello");
list.add("world");
list.add("java1");
list.add("java2");
//----------------------------------------------------------------------------------------------------------------
//在集合中的指定位置插入指定的元素
list.add(1,"我的位置在索引1"); //注意:选add(int index, String element)
//list.add(99,"索引越界异常"); //报错IndexOutOfBoundsException
//输出集合对象
System.out.println(list);
System.out.println("-----------------------------");
//----------------------------------------------------------------------------------------------------------------
//删除指定索引处的元素,返回被删除的元素
list.remove(3); //注意:选remove(int index)。删除3索引处的元素
System.out.println(list);
System.out.println("-----------------------------");
//list.remove(99); //报错IndexOutOfBoundsException
//---------------------------------------------------------------------------------------------------------------
//修改指定索引处的元素,返回被修改的元素
list.set(2,"我修改了索引2处的元素");
System.out.println(list);
System.out.println("-----------------------------");
//list.set(99,"索引越界"); //报错IndexOutOfBoundsException
//-----------------------------------------------------------------------------------------------------------------
//返回指定索引处的元素
System.out.println(list.get(1));;
System.out.println("-----------------------------");
//System.out.println(list.get(99)); //报错IndexOutOfBoundsException
//-----------------------------------------------------------------------------------------------------------------
//下面的内容是拓展,建议要会
//最后,我们再学一种新的遍历方式。之前学的遍历是利用迭代器来实现遍历,其实对于List集合,还有一种遍历方式是可以使用的。如下
//原理: 拥有索引是List集合的特点,通过索引获取到指定索引处的元素实现对集合的遍历
for (int i = 0; i < list.size(); i++){ //控制索引在集合元素总数量内,即如果集合有3个元素,我们最多遍历到第三元素
String s = list.get(i); //生成的是String,名字叫s
System.out.println(s);
}
//为了叫法方便,后续我们会叫这种遍历集合的方式为'for循环方式'
}
}
List集合存储学生对象并遍历
需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
思路: 1、定义学生类 2、创建List集合对象 3、创建学生对象 4、把学生添加到集合 5、遍历集合(可以使用迭代器方式,或者for循环方式)
List集合存储学生对象并遍历的练习
xxxxxxxxxx
package ch14;
public class a_8_1Student {
//成员变量
private String name;
private int age;
//无参构造方法
public a_8_1Student() {
}
//带参构造方法
public a_8_1Student(String name, int age) {
this.name = name;
this.age = age;
}
//成员变量对应的get、set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
xxxxxxxxxx
package ch14;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class a_8_2测试 {
public static void main(String[] args) {
//创建List集合对象
List<a_8_1Student> list = new ArrayList<a_8_1Student>();
//创建学生对象
a_8_1Student s1 = new a_8_1Student("张三", 18);
a_8_1Student s2 = new a_8_1Student("李四", 19);
a_8_1Student s3 = new a_8_1Student("王五", 20);
//把学生添加到集合
list.add(s1);
list.add(s2);
list.add(s3);
//遍历集合,这里使用迭代器的方式
Iterator<a_8_1Student> it = list.iterator();
while (it.hasNext()) {
a_8_1Student s = it.next();
System.out.println(s.getName() + "," + s.getAge());
}
System.out.println("------------------");
//遍历集合,这里使用for循环的方式
for (int i = 0; i < list.size(); i++){
a_8_1Student s = list.get(i);
System.out.println(s.getName() + "," + s.getAge());
}
}
}
List集合存储学生对象三种方式遍历
需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台,遍历该集合
思路如下 1、定义学生类 2、创建List集合对象 3、创建学生对象 4、把学生添加到集合 5、遍历集合。这里是重点,我们要使用三种方式进行遍历 (1)第一种:迭代器,集合特有的遍历方式。适合的使用场景:当同事使用迭代器或开发要求使用迭代器时 (2)第二种:普通for,带有索引的遍历方式。适合的使用场景:操作时需要使用到索引时 (3)第三种:增强for,最方便的的遍历方式。适合的使用场景:只是为了遍历时
List集合存储学生对象三种方式遍历的练习
xxxxxxxxxx
package ch14;
public class a_12_1Student {
//成员变量
private String name;
private int age;
//无参构造方法
public a_12_1Student() {
}
//带参构造方法
public a_12_1Student(String name, int age) {
this.name = name;
this.age = age;
}
//成员变量对应的get、set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
xxxxxxxxxx
package ch14;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class a_12_2测试 {
public static void main(String[] args) {
//创建List集合对象
List<a_12_1Student> list = new ArrayList<a_12_1Student>();
//创建学生对象
a_12_1Student s1 = new a_12_1Student("张三",18);
a_12_1Student s2 = new a_12_1Student("李四",19);
a_12_1Student s3 = new a_12_1Student("王五",20);
//把学生添加到集合
list.add(s1);
list.add(s2);
list.add(s3);
//-----------------------------------------------------------------------------------------------------
//第一种:迭代器,集合特有的遍历方式
Iterator<a_12_1Student> it = list.iterator();
while (it.hasNext()){
a_12_1Student s = it.next();
System.out.println(s.getName()+","+s.getAge());
}
System.out.println("---------------------");
//-----------------------------------------------------------------------------------------------------
//第二种:普通for,带有索引的遍历方式
for(int i=0; i< list.size(); i++){
a_12_1Student s = list.get(i);
System.out.println(s.getName()+","+s.getAge());
}
System.out.println("---------------------");
//-----------------------------------------------------------------------------------------------------
//第三种:增强for,最方便的的遍历方式
for(a_12_1Student s : list){
System.out.println(s.getName()+","+s.getAge());
}
}
}
List集合的子类的特点
List集合的常用子类: ArrayList,LinkedList
ArrayList的特点如下(实际开发中比较常用这个) 1、该类实现了List接口,即List集合有的功能,该类都有 2、该类是List接口的可调整大小的数组实现,即ArrayList集合的底层的数据结构是数组,该集合也就有了查询快,增删慢的特点
LinkedList的特点如下 1、该类实现了List接口,即List集合有的功能,该类都有 2、该类是链表实现List接口,即LinkedList集合的底层的数据结构是链表,该集合也就有了增删快、查询慢的特点
List集合子类特点的练习
xxxxxxxxxx
package ch14;
import java.util.ArrayList;
import java.util.LinkedList;
//案例需求: 分别使用ArrayList和LinkedList完成存储字符串并遍历,注意这里的遍历有三种方式,也就是前面学习过的
public class a_15_1测试 {
public static void main(String[] args) {
//创建ArrayList集合对象
ArrayList<String> array = new ArrayList<String>();
//添加元素
array.add("hello1");
array.add("world1");
array.add("java1");
//遍历集合,这里使用增强for遍历方式
for(String s : array){
System.out.println(s);
}
System.out.println("-----------------");
//-------------------------------------------------------------------------------------------------------------
//创建LinkedList集合对象
LinkedList<String> linkedList = new LinkedList<String>();
//添加元素
linkedList.add("hello2");
linkedList.add("world2");
linkedList.add("java2");
//遍历集合,这里使用增强for遍历方式
for(String s : linkedList){
System.out.println(s);
}
}
}