集合(6):List接口的子类:ArrayList类、Vector类、LinkedList类
集合(6):List接口的子类:ArrayList类、Vector类、LinkedList类
一、ArrayList类
1、ArrayList类的概述
底层数据结构是数组,查询快、增删慢
线程不安全,效率高
2、ArrayList案例
import java.util.ArrayList;
import java.util.Iterator;
/*
使用ArrayList存储自定义对象并遍历
*/
public class ArrayListDemo1 {
public static void main(String[] args) {
//创建ArrayList集合对象
ArrayList arrayList = new ArrayList();
//创建5个学生对象
Student s1 = new Student("李玉伟", 18);
Student s2 = new Student("刘强东", 48);
Student s3 = new Student("王健林", 67);
Student s4 = new Student("马化腾", 50);
Student s5 = new Student("马云", 57);
//将学生对象添加到集合中
arrayList.add(s1);
arrayList.add(s2);
arrayList.add(s3);
arrayList.add(s4);
arrayList.add(s5);
System.out.println("======遍历方式1:迭代器遍历======");
//获取迭代器
Iterator iterator = arrayList.iterator();
//遍历迭代器
while (iterator.hasNext()){
Object next = iterator.next();//获取元素
Student s = (Student)next;//向下转型
//使用getXxx()输出
System.out.println(s.getName()+"===="+s.getAge());
}
System.out.println("======遍历方式2:get()和size()方法结合======");
for(int i=0;i<arrayList.size();i++){
Object o = arrayList.get(i);
Student s = (Student)o;
System.out.println(s.getName()+"===="+s.getAge());
}
}
}
执行结果如下:
======遍历方式1:迭代器遍历======
李玉伟====18
刘强东====48
王健林====67
马化腾====50
马云====57
======遍历方式2:get()和size()方法结合======
李玉伟====18
刘强东====48
王健林====67
马化腾====50
马云====57
Process finished with exit code 0
二、Vector类
1、Vector类的概述
底层数据结构是数组,查询快,增删慢;
线程安全的,效率低(虽然是线程安全的,以后我们也不使用它,后面会说一个线程安全的类替代它)
2、Vector特有的方法
(1)public void addElement(Object obj)
//向集合中添加元素,效果和add()一样,以后统一使用add()方法
(2)public Object elementAt(int index)
//传入索引参数,返回指定位置的元素,效果和get(int index)一样,以后统一使用get(int index)方法
(3)public Enumeration elements()
//返回此向量的组件的枚举
特有功能案例:
import java.util.Enumeration;
import java.util.Vector;
public class VetorDemo {
public static void main(String[] args) {
//创建Vetor集合对象
Vector vector = new Vector();
//向集合中添加元素(以字符串为例)
vector.addElement("hello");
vector.add("world");
vector.addElement("java");
System.out.println(vector);//[hello, world, java]
//打印的能看懂,说明Vector重写了toString()方法
/*
当用add()和addElement()添加元素时,效果一样
那么以后我们统一使用add()
*/
System.out.println("===============");
//调用Vector类特有的方法:public Object elementAt(int index)
//传入索引参数,返回指定位置的元素
Object o = vector.elementAt(0);//传入一个索引值
Object o1 = vector.get(0);
System.out.println(o);//hello
System.out.println(o1);//hello
/*
当用get()和elementAt()获取元素时,效果一样
那么以后我们统一使用get()
*/
System.out.println("===============");
//调用Vector类特有的方法:public Enumeration elements()
//返回此向量的组件的枚举
Enumeration elements = vector.elements();
System.out.println(elements);//java.util.Vector$1@1540e19d
//返回的是地址值,说明Enumeration没有重写toString()方法
//要想输出Vector集合中的元素,改进如下
while (elements.hasMoreElements()){
Object o2 = elements.nextElement();
//未使用迭代器,不需要转型
System.out.println(o2);
}
}
}
执行结果如下:
[hello, world, java]
===============
hello
hello
=================
java.util.Vector$1@1540e19d
hello
world
java
Process finished with exit code 0
三、LinkedList类
1、LinkedList类的概述
底层数据结构为链表,查询慢,增删快;
线程不安全的,效率高
2、LinkedList类特有的方法
(1)添加功能:
void addFirst(Object obj) 在该列表开头插入指定的元素
void addLast(Object obj) 将指定的元素追加到此列表的末尾。等同于add()方法
(2)获取功能:
Object getFirst() 返回此列表中的第一个元素
Object getLast() 返回此列表中的最后一个元素
(3)删除功能:
Object removeFirst() 从此列表中删除并返回第一个元素
Object removeLast() 从此列表中删除并返回最后一个元素
特有方法的案例:
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
//创建LinkedList集合对象
LinkedList linkedList = new LinkedList();
//向LinkedList集合中添加元素
linkedList.add("hello");
linkedList.add("world");
linkedList.add("java");
linkedList.add("hadoop");
linkedList.add("hive");
linkedList.add("spark");
System.out.println(linkedList);//[hello, world, java, hadoop, hive, spark]
//说明LinkedList类重写了toString()方法
System.out.println("====调取添加功能====");
//void addFirst(Object obj) 在该列表开头插入指定的元素
linkedList.addFirst("flink");
System.out.println(linkedList);//[flink, hello, world, java, hadoop, hive, spark]
//void addLast(Object obj) 将指定的元素追加到此列表的末尾,等同于add()方法
linkedList.addLast("Hbase");
System.out.println(linkedList);//[flink, hello, world, java, hadoop, hive, spark, Hbase]
System.out.println("====调取获取功能====");
//Object getFirst() 返回此列表中的第一个元素
Object first = linkedList.getFirst();
System.out.println(first);//flink
//Object getLast() 返回此列表中的最后一个元素
Object last = linkedList.getLast();
System.out.println(last);//Hbase
System.out.println("====调取删除功能====");
//Object removeFirst() 从此列表中删除并返回第一个元素
Object o = linkedList.removeFirst();
System.out.println(o);//flink
System.out.println(linkedList);//[hello, world, java, hadoop, hive, spark, Hbase]
//Object removeLast() 从此列表中删除并返回最后一个元素
Object o1 = linkedList.removeLast();
System.out.println(o1);//Hbase
System.out.println(linkedList);//[hello, world, java, hadoop, hive, spark]
}
}
执行结果如下:
[hello, world, java, hadoop, hive, spark]
====调取添加功能====
[flink, hello, world, java, hadoop, hive, spark]
[flink, hello, world, java, hadoop, hive, spark, Hbase]
====调取获取功能====
flink
Hbase
====调取删除功能====
flink
[hello, world, java, hadoop, hive, spark, Hbase]
Hbase
[hello, world, java, hadoop, hive, spark]
Process finished with exit code 0
3、LinkedList类的案例
(1)存储字符串并遍历
(2)存储自定义对象并遍历

浙公网安备 33010602011771号