List接口概述
特点
有序:存取顺序一致。
有索引
元素可重复
List集合遍历方式
普通for
增强for
迭代器
List接口的常用子类
ArrayList
LinkedList
Vector(了解)
List常用方法演示
增删改查方法
/** List接口的常用方法 * boolean add(E e) * E remove(int index) * boolean remove(Object o) * E set(int index, E element) * E get(int index) * int size() */ public class ListDemo { public static void main(String[] args) { List<Integer> list02 = new ArrayList<>(); list02.add(1); list02.add(2); list02.add(3); //删除的是索引为1的元素//要删除值为1的元素只能用包装类 System.out.println(list02.remove(1)); System.out.println(list02.remove(new Integer(4))); // 创建集合对象 List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); System.out.println(list); // ["a","b","c"] //删除索引为1的元素 System.out.println(list.remove(1)); // b System.out.println(list); // ["a","c"] //删除值为d的一个元素 System.out.println(list.remove("d")); // false System.out.println(list); // ["a","c"] //修改索引为1的元素为d list.set(1, "d"); System.out.println(list); // [a,d] //获取索引为0的元素 System.out.println(list.get(0)); // a System.out.println(list.size()); } }
ArrayList:
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
Vector:
底层数据结构是数组,查询快,增删慢
线程安全,效率低
LinkedList:
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
案例:
使用List的任何子类存储字符串或者存储自定义对象并遍历。
ArrayList
存储字符串并遍历
//存储字符串 // 创建集合对象 ArrayList<String> array = new ArrayList<>(); // 创建元素对象,并添加元素 array.add("hello"); array.add("world"); array.add("java"); // 遍历 Iterator<String> it = array.iterator(); while (it.hasNext()) { String s = it.next(); System.out.println(s); } System.out.println("-----------"); for (int x = 0; x < array.size(); x++) { String s = (String) array.get(x); System.out.println(s); } // 存储自定义对象并遍历。 // 创建集合对象 ArrayList<Student> arrayStr = new ArrayList<>(); // 创建学生对象 Student s1 = new Student("武松", 30); Student s2 = new Student("鲁智深", 40); Student s3 = new Student("林冲", 36); Student s4 = new Student("杨志", 38); // 添加元素 arrayStr.add(s1); arrayStr.add(s2); arrayStr.add(s3); arrayStr.add(s4); // 遍历 Iterator<Student> itStr = arrayStr.iterator(); while (itStr.hasNext()) { Student s = itStr.next(); System.out.println(s.getName() + "---" + s.getAge()); } System.out.println("----------------"); for (int x = 0; x < arrayStr.size(); x++) { Student s = arrayStr.get(x); System.out.println(s.getName() + "---" + s.getAge()); } //学生类 class Student { private String name; private int age; 。。。。 }
LinkedList的特有功能:
A:添加功能
public void addFirst(Object e)
public void addLast(Object e)
B:获取功能
public Object getFirst()
public Obejct getLast()
C:删除功能
public Object removeFirst()
public Object removeLast()
LinkedList 基本使用
// 1. 创建 LinkedList LinkedList<String> linkList = new LinkedList<>(); // 2. 使用 add 方法添加元素 linkList.add("java1"); linkList.add("java2"); linkList.add("java3"); System.out.println(linkList); System.out.println("-----------"); // 3. 使用 add 方法在指定索引添加元素 linkList.add(1, "index"); System.out.println(linkList); System.out.println("-----------"); // 4. 使用 set 方法修改指定位置索引 linkList.set(1, "set"); System.out.println(linkList); System.out.println("-----------"); // 5. 使用 get 方法获取指定索引的元素 linkList.get(2); System.out.println("linkList.get(2):"+linkList.get(2)); System.out.println("-----------"); // 6. 使用 size 方法获取集合大小 linkList.size(); System.out.println("linkList.size():"+linkList.size()); System.out.println("-----------"); // 7. 使用 remove 方法删除指定索引的元素 linkList.remove(2); System.out.println(linkList); System.out.println("-----------"); // 8. 使用 remove 方法删除指定的元素 linkList.remove("java3"); System.out.println(linkList); System.out.println("-----------"); // 9. 使用 clear 清空集合中的元素 linkList.clear(); System.out.println(linkList); System.out.println("-----------");
LinkedList 特有方法
public static void main(String[] args) { // 1. 创建 LinkedList LinkedList<String> linkList = new LinkedList<>(); // 2. 使用 add 方法添加元素 linkList.add("java1"); linkList.add("java2"); linkList.add("java3"); System.out.println(linkList); System.out.println("-----------"); // 3. 使用 addFirst 添加元素到集合最前面 linkList.addFirst("addFirst"); // 4. 使用 addLast 添加元素到集合最后面 linkList.addLast("addLast"); System.out.println(linkList); System.out.println("-----------"); // 5. 使用 getFirst 获取集合第一个元素 System.out.println("getFirst:" + linkList.getFirst()); // 6. 使用 getLast 获取集合最后一个元素 System.out.println("getLast:" + linkList.getLast()); System.out.println("-----------"); // 7. 使用 removeFirst 删除集合第一个元素 System.out.println("removeFirst:" + linkList.removeFirst()); // 8. 使用 removeLast 删除集合最后一个元素 System.out.println("removeLast:" + linkList.removeLast()); System.out.println(linkList); System.out.println("-----------"); }
LinkedList与栈操作相关的方法
push(E e);将元素添加栈中
E pop();获得栈顶元素,并将该元素从栈中移除。
E peek(); 获得栈顶元素,并不将该元素从栈中移除。
LinkedList与队列操作相关的方法
offer(E e) 将元素添加到队列中
E poll(); 获取队列中的第一个元素,并将该元素从队列中移除。
E peek(); 获得队列中的第一个元素,并不将该元素从队列中移除。
/** * LinkedList与栈操作相关的方法 */ public static void test01() { // 创建集合对象 LinkedList<String> list = new LinkedList<>(); // 压栈/入栈 list.push("aaa"); list.push("bbb"); list.push("ccc"); // 弹栈/出栈 String e = list.pop(); System.out.println(e); // ccc // 查询栈顶元素 String ee = list.peek(); System.out.println(ee); System.out.println(list); } /** * LinkedList与队列操作相关的方法 */ public class LinkedListDemo02 { public static void main(String[] args) { // 创建集合对象 LinkedList<String> list = new LinkedList<>(); // 添加元素 list.offer("aaa"); list.offer("bbb"); list.offer("ccc"); // 获得队列头的元素 String e = list.poll(); System.out.println(e); System.out.println(list.peek()); // bbb System.out.println(list); // [bbb,ccc] } }
如何选择ArrayList和LinkedList
如果只是查询数据,则选择ArrayList。
如果需要进行大量的增删操作,则选择LinkedList。
Vector(已经被ArrayList取代):(了解即可)
1:添加功能
public void addElement(Object obj) -- add()
2:获取功能
public Object elementAt(int index) -- get()
public Enumeration elements() -- Iterator iterator()
boolean hasMoreElements() hasNext()
Object nextElement() next()
JDK升级的原因:
A:安全
B:效率
C:简化书写
// 创建集合对象 Vector<String> v = new Vector<>(); // 添加功能 v.addElement("hello"); v.addElement("world"); v.addElement("java"); // 遍历 for (int x = 0; x < v.size(); x++) { String s = v.elementAt(x); System.out.println(s); } System.out.println("------------------"); // 遍历 for (String s : v) { System.out.println(s); } System.out.println("------------------"); Enumeration<String> en = v.elements(); // 返回的是实现类的对象 while (en.hasMoreElements()) { String s = en.nextElement(); System.out.println(s); }