List中的元素是有序排列的而且可重复
1.LinkedList
LinkedList是非线程安全的,底层是基于双向链表实现的
LinkedList常用方法:
- toArray() 以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组
- size() 返回此列表中的元素数
- set(int index,E element) 用指定的元素替换此列表中指定位置的元素
- removeLast() 从此列表中删除并返回最后一个元素
- removeFirst() 从此列表中删除并返回第一个元素
- remove(int index) 删除该列表中指定位置的元素
- getFirst() 返回此列表中的第一个元素
- getLast() 返回此列表中的最后一个元素
- get(int index) 返回此列表中指定位置的元素
- add(E element) 将指定的元素追加到此列表的末尾
- add(int index,E element) 在此列表中的指定位置插入指定的元素
- addFirst(E element) 在该列表开头插入指定的元素
- addLast(E element) 将指定的元素追加到此列表的末尾
- clear() 从列表中删除所有元素
2.ArrayList
ArrayList是非线程安全的,底层是基于数组实现
ArrayList常用方法:
- toArray() 以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组
- subList(int fromIndex,int toIndex) 返回此列表中指定的
fromIndex
(包括)和toIndex
之间的独占视图 - size() 返回此列表中的元素数
- set(int index,E element) 用指定的元素替换此列表中指定位置的元素
- removeRange(int fromIndex,int toIndex) 从这个列表中删除所有索引在
fromIndex
(含)和toIndex
之间的元素 - remove(int index) 删除该列表中指定位置的元素
- isEmpty() 如果此列表不包含元素,则返回true
- get(int index) 返回此列表中指定位置的元素
- add(E element) 将指定的元素追加到此列表的末尾
- add(int index,E element) 在此列表中的指定位置插入指定的元素
- clear() 从列表中删除所有元素
package com.gather; /** * 人实体类 * @author yyx * 2019年2月27日 */ public class Person { private String userName; private Integer userAge; public Person(String userName, Integer userAge) { super(); this.userName = userName; this.userAge = userAge; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Integer getUserAge() { return userAge; } public void setUserAge(Integer userAge) { this.userAge = userAge; } @Override public String toString() { return "Person [userName=" + userName + ", userAge=" + userAge + "]"; } }
package com.gather; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; /** * * @author yyx 2019年2月27日 */ public class LIstPractise { public static void main(String[] args) { List<Person> list = new ArrayList<>(); Person p1 = new Person("张三", 22); Person p2 = new Person("李四", 23); Person p3 = new Person("王五", 18); list.add(p1); list.add(p2); list.add(p3); // 第一种遍历方式:for循环 for (int i = 0; i < list.size(); i++) { Person person = list.get(i); System.out.println(person); } System.out.println("----------------"); // 第二种遍历方式:foreach for (Person person : list) { System.out.println(person); } System.out.println("----------------"); // 第三种遍历方式:Iterator Iterator<Person> iterator = list.iterator(); while (iterator.hasNext()) { Person person = iterator.next(); System.out.println(person); } System.out.println("----------------"); LinkedList<Person> linkedList=new LinkedList<>(); linkedList.addFirst(p3); linkedList.add(p2); linkedList.addLast(p1); //getFirst() 返回此列表中的第一个元素 System.out.println(linkedList.getFirst()); //getLast() 返回此列表中的最后一个元素 System.out.println(linkedList.getLast()); System.out.println("----------------"); //toArray() 以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组 Object[] persons=linkedList.toArray(); System.out.println(persons[0]); } }
3.ArrayList和LinkedList的区别
- ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构
- 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针
- 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据
- ArrayList没有实现Queue队列接口,LinkedList实现了Queue接口
4.Vector
Vector是线程安全的,底层是基于动态数组实现
Vector常用方法:
- add(E element) 将指定的元素追加到此Vector的末尾
- add(int index,E element) 在此Vector中的指定位置插入指定的元素
- elementAt(int index) 返回指定索引处的组件
- get(int index) 返回此向量中指定位置的元素
- removeElementAt(int index) 删除指定索引处的组件
- removeRange(int fromIndex,int toIndex) 从此列表中删除所有索引为
fromIndex
(含)和toIndex
之间的元素
package com.gather; import java.util.Iterator; import java.util.Vector; /** * 大小可以动态变化,其存储由容器自动处理 * @author yyx * 2019年2月28日 */ public class VectorPractise { public static void main(String[] args) { Vector<Person> vector = new Vector<>(); Person p1 = new Person("张三", 22); Person p2 = new Person("李四", 23); Person p3 = new Person("王五", 18); vector.add(p1); vector.add(p2); vector.add(p3); Iterator<Person> iterator = vector.iterator(); while (iterator.hasNext()) { Person person = iterator.next(); System.out.println(person); } } }