> 文档中心 > 【Java】List接口和常用方法

【Java】List接口和常用方法

目录

  • 1.List集合
    • List集合的遍历
    • List方法
  • 2.ArrayList
    • 测试案例
    • ArrayList源码
  • 3.vector集合
  • 4.LinkList集合
    • LinkList增删查改

1.List集合

//1. List集合类中元素有序(即添加顺序和取出顺序一致)、且可重复 [案例]
通常包括ArrayList和LinkList,vector三个类

package com.hspedu.list_;import java.util.ArrayList;import java.util.List;/** * @author Demo龙 * @version 1.0 */public class List_ {    @SuppressWarnings({"all"})    public static void main(String[] args) { //1. List集合类中元素有序(即添加顺序和取出顺序一致)、且可重复 [案例] List list = new ArrayList(); list.add("jack"); list.add("tom"); list.add("mary"); list.add("hsp"); list.add("tom"); System.out.println("list=" + list); //2. List集合中的每个元素都有其对应的顺序索引,即支持索引 //   索引是从0开始的 System.out.println(list.get(3));//hsp //3.    }}

测试结果
【Java】List接口和常用方法

List集合的遍历

package com.hspedu.list_;import java.util.*;/** * @author Demo龙 * @version 1.0 */public class ListFor {    @SuppressWarnings({"all"})    public static void main(String[] args) { //List 接口的实现子类 Vector LinkedList //List list = new ArrayList(); //List list = new Vector(); List list = new LinkedList(); list.add("jack"); list.add("tom"); list.add("鱼香肉丝"); list.add("北京烤鸭子"); //遍历 //1. 迭代器 Iterator iterator = list.iterator(); while (iterator.hasNext()) {     Object obj =  iterator.next();     System.out.println(obj); } System.out.println("=====增强for====="); //2. 增强for for (Object o : list) {     System.out.println("o=" + o); } System.out.println("=====普通for===="); //3. 使用普通for for (int i = 0; i < list.size(); i++) {     System.out.println("对象=" + list.get(i)); }    }}

【Java】List接口和常用方法

List方法

package com.hspedu.list_;import java.util.ArrayList;import java.util.List;/** * @author Demo龙 * @version 1.0 */public class ListMethod {    @SuppressWarnings({"all"})    public static void main(String[] args) { List list = new ArrayList(); list.add("张三丰"); list.add("贾宝玉");// void add(int index, Object ele):在index位置插入ele元素 //在index = 1的位置插入一个对象 list.add(1, "酷酷酷"); System.out.println("list=" + list);// boolean addAll(int index, Collection eles):从index位置开始将eles中的所有元素添加进来 List list2 = new ArrayList(); list2.add("jack"); list2.add("tom"); list.addAll(1, list2); System.out.println("list=" + list);// Object get(int index):获取指定index位置的元素 //说过// int indexOf(Object obj):返回obj在集合中首次出现的位置 System.out.println(list.indexOf("tom"));//2// int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置 list.add("酷酷酷"); System.out.println("list=" + list); System.out.println(list.lastIndexOf("酷酷酷"));// Object remove(int index):移除指定index位置的元素,并返回此元素 list.remove(0); System.out.println("list=" + list);// Object set(int index, Object ele):设置指定index位置的元素为ele , 相当于是替换. list.set(1, "玛丽"); System.out.println("list=" + list);// List subList(int fromIndex, int toIndex):返回从fromIndex到toIndex位置的子集合 // 注意返回的子集合 fromIndex <= subList < toIndex List returnlist = list.subList(0, 2); System.out.println("returnlist=" + returnlist);    }}

【Java】List接口和常用方法

2.ArrayList

【Java】List接口和常用方法

特点:线程不安全查询速度快
【Java】List接口和常用方法

测试案例

package com.hspedu.list_;import java.util.ArrayList;import java.util.List;/** * @author Demo龙 * @version 1.0 */public class ListMethod {    @SuppressWarnings({"all"})    public static void main(String[] args) { List list = new ArrayList(); list.add("张三丰"); list.add("贾宝玉");// void add(int index, Object ele):在index位置插入ele元素 //在index = 1的位置插入一个对象 list.add(1, "韩顺平"); System.out.println("list=" + list);// boolean addAll(int index, Collection eles):从index位置开始将eles中的所有元素添加进来 List list2 = new ArrayList(); list2.add("jack"); list2.add("tom"); list.addAll(1, list2); System.out.println("list=" + list);// Object get(int index):获取指定index位置的元素 //说过// int indexOf(Object obj):返回obj在集合中首次出现的位置 System.out.println(list.indexOf("tom"));//2// int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置 list.add("韩顺平"); System.out.println("list=" + list); System.out.println(list.lastIndexOf("韩顺平"));// Object remove(int index):移除指定index位置的元素,并返回此元素 list.remove(0); System.out.println("list=" + list);// Object set(int index, Object ele):设置指定index位置的元素为ele , 相当于是替换. list.set(1, "玛丽"); System.out.println("list=" + list);// List subList(int fromIndex, int toIndex):返回从fromIndex到toIndex位置的子集合 // 注意返回的子集合 fromIndex <= subList < toIndex List returnlist = list.subList(0, 2); System.out.println("returnlist=" + returnlist);    }}

测试结果
【Java】List接口和常用方法

ArrayList源码

package com.hspedu.list_;import java.util.ArrayList;/** * @author Demo龙 * @version 1.0 */@SuppressWarnings({"all"})public class ArrayListSource {    public static void main(String[] args) { //注意,注意,注意,Idea 默认情况下,Debug 显示的数据是简化后的,如果希望看到完整的数据 //需要做设置. //使用无参构造器创建ArrayList对象 //ArrayList list = new ArrayList(); ArrayList list = new ArrayList(8); //使用for给list集合添加 1-10数据 for (int i = 1; i <= 10; i++) {     list.add(i); } //使用for给list集合添加 11-15数据 for (int i = 11; i <= 15; i++) {     list.add(i); } list.add(100); list.add(200); list.add(null);    }}

注:null也可作为元素加入ArrayList集合中。

3.vector集合

特点:线程安全,但速度慢,已被ArrayList取代

源码+特点

package com.hspedu.list_;import java.util.Vector;/** * @author Demo龙 * @version 1.0 */@SuppressWarnings({"all"})public class Vector_ {    public static void main(String[] args) { //无参构造器 //有参数的构造 Vector vector = new Vector(8); for (int i = 0; i < 10; i++) {     vector.add(i); } vector.add(100); System.out.println("vector=" + vector); //1. new Vector() 底层 /*     public Vector() {  this(10);     }  补充:如果是  Vector vector = new Vector(8);     走的方法:     public Vector(int initialCapacity) {  this(initialCapacity, 0);     }  2. vector.add(i)  2.1  //下面这个方法就添加数据到vector集合     public synchronized boolean add(E e) {  modCount++;  ensureCapacityHelper(elementCount + 1);  elementData[elementCount++] = e;  return true;     }   2.2  //确定是否需要扩容 条件 : minCapacity - elementData.length>0     private void ensureCapacityHelper(int minCapacity) {  // overflow-conscious code  if (minCapacity - elementData.length > 0)      grow(minCapacity);     }   2.3 //如果 需要的数组大小 不够用,就扩容 , 扩容的算法//newCapacity = oldCapacity + ((capacityIncrement > 0) ?// capacityIncrement : oldCapacity);//就是扩容两倍.     private void grow(int minCapacity) {  // overflow-conscious code  int oldCapacity = elementData.length;  int newCapacity = oldCapacity + ((capacityIncrement > 0) ?capacityIncrement : oldCapacity);  if (newCapacity - minCapacity  0)      newCapacity = hugeCapacity(minCapacity);  elementData = Arrays.copyOf(elementData, newCapacity);     }  */    }}

【Java】List接口和常用方法

4.LinkList集合

特点:链表结构,增删速度快

package com.hspedu.list_;/** * @author Demo龙 * @version 1.0 */public class LinkedList01 {    public static void main(String[] args) { //模拟一个简单的双向链表 Node jack = new Node("jack"); Node tom = new Node("tom"); Node hsp = new Node("老韩"); //连接三个结点,形成双向链表 //jack -> tom -> hsp jack.next = tom; tom.next = hsp; //hsp -> tom -> jack hsp.pre = tom; tom.pre = jack; Node first = jack;//让first引用指向jack,就是双向链表的头结点 Node last = hsp; //让last引用指向hsp,就是双向链表的尾结点 //演示,从头到尾进行遍历 System.out.println("===从头到尾进行遍历==="); while (true) {     if(first == null) {  break;     }     //输出first 信息     System.out.println(first);     first = first.next; } //演示,从尾到头的遍历 System.out.println("====从尾到头的遍历===="); while (true) {     if(last == null) {  break;     }     //输出last 信息     System.out.println(last);     last = last.pre; } //演示链表的添加对象/数据,是多么的方便 //要求,是在 tom --------- 直接,插入一个对象 smith //1. 先创建一个 Node 结点,name 就是 smith Node smith = new Node("smith"); //下面就把 smith 加入到双向链表了 smith.next = hsp; smith.pre = tom; hsp.pre = smith; tom.next = smith; //让first 再次指向jack first = jack;//让first引用指向jack,就是双向链表的头结点 System.out.println("===从头到尾进行遍历==="); while (true) {     if(first == null) {  break;     }     //输出first 信息     System.out.println(first);     first = first.next; } last = hsp; //让last 重新指向最后一个结点 //演示,从尾到头的遍历 System.out.println("====从尾到头的遍历===="); while (true) {     if(last == null) {  break;     }     //输出last 信息     System.out.println(last);     last = last.pre; }    }}//定义一个Node 类,Node 对象 表示双向链表的一个结点class Node {    public Object item; //真正存放数据    public Node next; //指向后一个结点    public Node pre; //指向前一个结点    public Node(Object name) { this.item = name;    }    public String toString() { return "Node name=" + item;    }}

【Java】List接口和常用方法

LinkList增删查改

package com.hspedu.list_;import java.util.Iterator;import java.util.LinkedList;/** * @author Demo龙 * @version 1.0 */@SuppressWarnings({"all"})public class LinkedListCRUD {    public static void main(String[] args) { LinkedList linkedList = new LinkedList(); linkedList.add(1); linkedList.add(2); linkedList.add(3); System.out.println("linkedList=" + linkedList); //演示一个删除结点的 linkedList.remove(); // 这里默认删除的是第一个结点 //linkedList.remove(2); System.out.println("linkedList=" + linkedList); //修改某个结点对象 linkedList.set(1, 999); System.out.println("linkedList=" + linkedList); //得到某个结点对象 //get(1) 是得到双向链表的第二个对象 Object o = linkedList.get(1); System.out.println(o);//999 //因为LinkedList 是 实现了List接口, 遍历方式 System.out.println("===LinkeList遍历迭代器===="); Iterator iterator = linkedList.iterator(); while (iterator.hasNext()) {     Object next =  iterator.next();     System.out.println("next=" + next); } System.out.println("===LinkeList遍历增强for===="); for (Object o1 : linkedList) {     System.out.println("o1=" + o1); } System.out.println("===LinkeList遍历普通for===="); for (int i = 0; i < linkedList.size(); i++) {     System.out.println(linkedList.get(i)); } /* 1. LinkedList linkedList = new LinkedList();public LinkedList() {}    2. 这时 linkeList 的属性 first = null  last = null    3. 执行 添加 public boolean add(E e) {      linkLast(e);      return true;  }     4.将新的结点,加入到双向链表的最后      void linkLast(E e) {  final Node l = last;  final Node newNode = new Node(l, e, null);  last = newNode;  if (l == null)      first = newNode;  else      l.next = newNode;  size++;  modCount++;     }  */ /*    linkedList.remove(); // 这里默认删除的是第一个结点   1. 执行 removeFirst     public E remove() {  return removeFirst();     }  2. 执行     public E removeFirst() {  final Node f = first;  if (f == null)      throw new NoSuchElementException();  return unlinkFirst(f);     }   3. 执行 unlinkFirst, 将 f 指向的双向链表的第一个结点拿掉     private E unlinkFirst(Node f) {  // assert f == first && f != null;  final E element = f.item;  final Node next = f.next;  f.item = null;  f.next = null; // help GC  first = next;  if (next == null)      last = null;  else      next.prev = null;  size--;  modCount++;  return element;     }  */    }}

【Java】List接口和常用方法