ArrayList(数组列表) 和 LinkedList(链表) 同属于 List 接口的实现类,是 List 的子类
一、ArrayList类
1、概述
- 底层数据结构是数组,查询快,增删慢
- 线程不安全,效率高
2、ArrayList 案例
- 存储字符串并遍历
package shuzuliebiao; import java.util.ArrayList; import java.util.Iterator; public class ArrayListDemo { public static void main(String[] args){ ArrayList arr = new ArrayList();//创建集合对象 arr.add("let's"); arr.add("make"); arr.add("love"); for (int i = 0; i < arr.size(); i++){//循环输出集合中的每一个值 String s = (String) arr.get(i); System.out.println(s); } System.out.println("------------------------------------"); //遍历 Iterator it = arr.iterator();//集合上的迭代器,元素的迭代器返回的类型 while (it.hasNext()){ String s = (String) it.next(); System.out.println(s); } } }
运行后显示:
- 存储自定义对象并遍历
创建 Nvyou.java 文件
package shuzuliebiao; public class Nvyou { private String name; private int age; public Nvyou(){ super(); } public Nvyou(String name, int age){ super(); 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; } }
创建 ArrayListDemo.java 文件
package shuzuliebiao; import java.util.ArrayList; import java.util.Iterator; public class ArrayListDemo { public static void main(String[] args){ ArrayList arr = new ArrayList();//创建集合对象 //创建女优对象 Nvyou n1 = new Nvyou("苍井空",18); Nvyou n2 = new Nvyou("波多野结衣",19); Nvyou n3 = new Nvyou("泷泽萝拉",20); Nvyou n4 = new Nvyou("小泽玛利亚",21); //把女优对象添加到集合中 arr.add(n1); arr.add(n2); arr.add(n3); arr.add(n4); //通过for 循环遍历 for (int i = 0; i < arr.size(); i++){ Nvyou n = (Nvyou) arr.get(i);//注意类型转换的写法 System.out.println("姓名:"+n.getName()+"---年龄:"+n.getAge()); } System.out.println("-------------------------------"); //通过集合上的 Iterator 迭代器 hasNext()、Next() 遍历 Iterator it = arr.iterator(); while (it.hasNext()){ Nvyou n = (Nvyou) it.next(); System.out.println("姓名:"+n.getName()+"---年龄:"+n.getAge()); } } }
运行显示:
- ArrayList去除集合中字符串的重复值(字符串的内容相同)
package shuzuliebiao; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ArrayListDemo { public static void main(String[] args){ ArrayList arr = new ArrayList();//创建集合对象 //向集合中添加多个元素,包括相同的元素 arr.add("hello"); arr.add("java"); arr.add("HELLO"); arr.add("JAVA"); arr.add("hello"); arr.add("java"); arr.add("hello"); System.out.println(arr); System.out.println("---------------------------"); List l = new ArrayList();//新建集合 for (int i = 0; i < arr.size(); i++){ String s = (String) arr.get(i); if (!l.contains(s)){ l.add(s); } } Iterator it = l.iterator(); while (it.hasNext()){ System.out.println(it.next()); } } }
在上面的案例中,新建了一个集合 l;如果不新建集合的话
package shuzuliebiao; import java.util.ArrayList; import java.util.Iterator; public class ArrayListDemo { public static void main(String[] args){ ArrayList arr = new ArrayList();//创建集合对象 //向集合中添加多个元素,包括相同的元素 arr.add("hello"); arr.add("java"); arr.add("HELLO"); arr.add("JAVA"); arr.add("hello"); arr.add("java"); arr.add("hello"); System.out.println(arr); System.out.println("---------------------------"); //List l = new ArrayList(); for (int i = 0; i < arr.size() - 1; i++){ for (int j = i + 1; j < arr.size(); j++) { if (arr.get(i).equals(arr.get(j))) { arr.remove(j); j--; } } } Iterator it = arr.iterator(); while (it.hasNext()){ String s = (String) it.next(); System.out.println(s); } } }
- 去除集合中自定义对象的重复值(对象的成员变量值都相同)
第一步:创建Nvyou.java 封装类
package shuzuliebiao; public class Nvyou { private String name; private int age; public Nvyou(){ super(); } public Nvyou(String name, int age){ super(); 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; } }
第二步:创建 ArrayDemo.java 文件
package shuzuliebiao; import java.util.ArrayList; import java.util.Iterator; public class ArrayListDemo { public static void main(String[] args){ ArrayList arr = new ArrayList(); Nvyou n1 = new Nvyou("苍井空",18); Nvyou n2 = new Nvyou("小泽玛利亚",19); Nvyou n3 = new Nvyou("泷泽萝拉",20); Nvyou n4 = new Nvyou("苍井空",21);//和第一个年龄不同 Nvyou n5 = new Nvyou("苍井空",18);//和第一个完全相同 //添加元素 arr.add(n1); arr.add(n2); arr.add(n3); arr.add(n4); arr.add(n5); ArrayList newarr = new ArrayList();//创建新集合 //遍历旧集合,获取每一个元素 Iterator it = arr.iterator(); while(it.hasNext()){ Nvyou n = (Nvyou) it.next(); if (!newarr.contains(n)){// 拿这个元素到新集合去找,看有没有,调用equals方法默认比较内存地址,这是重写equals方法 newarr.add(n); } } //遍历新集合 for (int i = 0; i < newarr.size(); i++){ Nvyou s = (Nvyou) newarr.get(i); System.out.println(s.getName() + "---" + s.getAge()); } } }
二、Vector 类
1、概述
- Vector:向量;矢量
- 底层数据结构是数组,查询快,增删慢
- 线程安全,效率低
2、Vector 类特有功能
public void addElement(E obj)
public E elementAt(int index)
public Enumeration elements()
3、Vector 案例
- 存储字符串并遍历
package Vector; import java.util.Enumeration; import java.util.Vector; public class VectorDemo { public static void main(String[] args){ Vector v = new Vector();//创建集合对象 //添加元素 v.add("I"); v.addElement("love"); v.addElement("java"); //通过for 循环遍历 for (int i = 0; i < v.size(); i++){ String s = (String) v.elementAt(i); System.out.println(s); } System.out.println("------------------------"); Enumeration en = v.elements();//返回实现类的对象,一个实现枚举接口的对象生成一系列元素,一个在一个时间。 while (en.hasMoreElements()){ String s = (String)en.nextElement(); System.out.println(s); } } }
三、LinkedList 类
1、概述
- 底层数据结构是链表,查询慢,增删快
- 线程不安全,效率高
2、LinkedList类特有功能
public void addFirst(E e)及addLast(E e)
public E getFirst()及getLast()
public E removeFirst()及public E removeLast()
package LinkedList; import java.util.Iterator; import java.util.LinkedList; public class LinkedListDemo { public static void main(String[] args){ LinkedList link = new LinkedList();//创建集合对象 link.add("I"); link.add("love"); link.add("java"); System.out.println(link); link.addFirst("Lemon"); link.addLast("python"); System.out.println(link); System.out.println(link.getFirst());//获取link 集合中的第一个元素 System.out.println(link.getLast());//获取link 集合中的最后一个元素 System.out.println("----------------------------"); System.out.println(link.removeFirst());//移除第一个元素 System.out.println(link); System.out.println(link.removeLast());//移除最后一个元素 System.out.println(link); System.out.println("+++++++++++++++++++++++++++++++"); //使用for 循环输出每一个元素 for (int i = 0; i < link.size(); i++){ System.out.println(link.get(i)); } System.out.println("_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+"); //使用迭代器输出每一个元素 Iterator it = link.iterator(); while (it.hasNext()){ System.out.println(it.next()); } } }
运行输出:
3、LinkedList 案例
- 存储字符串并遍历
- 存储自定义对象并遍历
四、总结
1、List 子类的特点
-
ArrayList:
底层数据结构是数组,查询快,增删慢
线程不安全,效率高 -
Vector:
底层数据结构是数组,查询快,增删慢
线程安全,效率低 -
LinkedList:
底层数据结构是链表,查询慢,增删快
线程不安全,效率高