List容器(Java)

1.容器介绍

1.1 容器接口结构

  a. Java存储结构划分
  Java当中按照存储结构可以划分成为两个大类,分别是单列集合 java.util.Collection 和 双列集合 java.util.Map, 顾名思义Collection是实现单列集合的根接口, 而Map则是实现双列集合(键值对)的根接口。

  b. 单列接口Collection
在这里插入图片描述
  单列接口Collection当中下面可以看到存在许多的子接口例如,List接口,Set接口等等,今天我们着重介绍的就是List接口,即List容器当中的一些通用的操作和常用的实现类举例.

  c. List接口 : 有序 + 重复
在这里插入图片描述
  List接口当下拥有许多的实现类,其中常用的实现类有ArrayList,LinkedList,Vector等等,不同的实现类其底层实现的接口也会有不同,可能是用数组实现也可能是用链表进行实现的,不同的实现类也可能会拥有一些不同的操作方法。例如对于LinkList因为其底层实现了Deque接口所以其相对List接口以外还会有一些支持双端队头队尾的操作(addFirst, addLast)等.

1.2 简单解析

 A. 包路径:java.util.List
 B. List核心:单列 + 重复 + 有序
 C. 注意:下面使用ArrayList进行方法举例,所使用的方法全部是List接口的通用方法,不是ArrayList实现类的特有方法,是所有实现List接口实现类的所有通用方法,支持所有List接口下实现类的使用
 D. 常用实现类举例:
 ArrayList实现类:数组结构 + 查询快 + 增删慢
在这里插入图片描述

2. List容器创建(Member functions)

  使用ArrayList实现类

import java.util.ArrayList;
import java.util.List;
public class Main {
    
    
	public static void main(String[] args) {
    
    
		List<Integer> list = new ArrayList<Integer>(); // 指定具体对象Integer的List容器
		
	}
}

3. 访问操作(Element access)

3.1 get()

  索引访问:因为是有序存储的,所以肯定是支持索引访问的,即可以通过索引进行访问指定位置元素
在这里插入图片描述

import java.util.ArrayList;
import java.util.List;
public class Main {
    
    
	public static void main(String[] args) {
    
    
		List<Integer> list = new ArrayList<Integer>();
		for(int i = 0; i < 5; i ++ ) list.add(i);
		
		for(int i = 0; i < list.size(); i ++ ) // list.get()
		System.out.println(list.get(i)); // 0 1 2 3 4
	}
}

3.2 Iterator遍历

  迭代器访问:因为继承了迭代器Iterable接口,支持迭代器的访问操作
在这里插入图片描述

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
    
    
	public static void main(String[] args) {
    
    
		List<Integer> list = new ArrayList<Integer>();
		for(int i = 0; i < 5; i ++ ) list.add(i);
		
		Iterator<Integer> it = list.iterator();
		while(it.hasNext()) {
    
    
			System.out.println(it.next()); // 0 1 2 3 4
		}
		
		it = list.listIterator(2); // 从指定位置开始的迭代器
		while(it.hasNext()) {
    
    
			System.out.println(it.next()); // 2 3 4
		}
	}
}

3.3 增强for循环

  增强for循环:支持直接使用增强的for循环直接遍历容器内所有元素

扫描二维码关注公众号,回复: 17151641 查看本文章
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
    
    
	public static void main(String[] args) {
    
    
		List<Integer> list = new ArrayList<Integer>();
		for(int i = 0; i < 5; i ++ ) list.add(i);
		
		for(Integer it : list) // 增强for循环直接遍历所有元素
		System.out.println(it); // 0 1 2 3 4
	}
}

4. 修改操作(Modifiers)

4.1 add()

  单个元素添加 :
在这里插入图片描述

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
    
    
	public static void main(String[] args) {
    
    
		List<Integer> list = new ArrayList<Integer>();
		
		for(int i = 3; i > 0; i -- ) list.add(i);
		for(int i : list) System.out.print(i + " "); // 3 2 1
		System.out.println();
		
		list.add(0, 100); // 向指定位置插入元素
		for(int i : list) System.out.print(i + " "); // 100 3 2 1
		
	}
}

4.2 addAll()

  多个元素添加 :
在这里插入图片描述

public class Main {
    
    
	// 泛型使用,输出ArrayList所有Number范围内数据类型(只有在调用时才确定数据类型)
	public static void print(ArrayList<? extends Number> temp) {
    
     
		System.out.println(temp);
	}	
	
	public static void main(String[] args) {
    
    
		ArrayList<Number> list = new ArrayList<Number>();
		for(int i = 0; i < 2; i ++ ) list.add(i);
		print(list); // [0, 1]
		
		ArrayList<Number> list1 = new ArrayList<Number>();
		list1.add(0.1); list1.add(0.2);
		list.addAll(list1); // 添加到元素结尾
		print(list); //[0, 1, 0.1, 0.2]	
		
		ArrayList<Number> list2 = new ArrayList<Number>();
		list2.add(0.3); list2.add(0.4);
		list.addAll(0, list2); // 插入到指定位置后面
		print(list); //[0.3, 0.4, 0, 1, 0.1, 0.2]	
		
	}
}

4.3 remove()

  单个元素删除:remove方法默认是删除指定位置上的元素,如果想使用第二个方法,一定要记得进行强制类型转换(如果存储的元素正好也是int类型), 才会自动对应上第二个方法
在这里插入图片描述

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
    
    
	public static void main(String[] args) {
    
    
		List<Integer> list = new ArrayList<Integer>();
		for(int i = 3; i > 0; i -- ) list.add(i);
		list.add(2); // 3 2 1 2
		
		list.remove(3); // 根据索引删除
		for(int it : list) System.out.print(it + " "); // 3 2 1
		System.out.println();
		
		list.remove((Integer)3); // 注意 : 删除首次出现的元素对象(若有多个也只会删除第一个对象)
		for(int it : list) System.out.print(it + " "); // 2 1
		
	}
}

4.4 set()

  单个元素替换 :
在这里插入图片描述

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
    
    
	public static void main(String[] args) {
    
    
		List<Integer> list = new ArrayList<Integer>();
		for(int i = 3; i > 0; i -- ) list.add(i); // 3 2 1
		
		list.set(0, 30); // 元素30替换0位置上的元素
		for(int it : list) System.out.print(it + " "); // 30 2 1
		
	}
}

5. 容量操作(Member functions)

5.1 clear() + contains() + isEmpty() + size()

在这里插入图片描述

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
    
    
	public static void main(String[] args) {
    
    
		List<Integer> list = new ArrayList<Integer>();
		for(int i = 3; i > 0; i -- ) list.add(i); // 3 2 1
		
		System.out.println(list.contains(1)); // true
		System.out.println(list.size()); // 3
		System.out.println(list.isEmpty()); // false
		list.clear();
		System.out.println(list.isEmpty()); // true
	}
}

6. 其他操作(Other)

6.1 toArray()

a. toArray(): 将元素按适当顺序返回成为一个数组
在这里插入图片描述

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
    
    
	public static void main(String[] args) {
    
    
		List<Integer> list = new ArrayList<Integer>();
		for(int i = 3; i > 0; i -- ) list.add(i); // 3 2 1
		
		Object[] arr = list.toArray();
		for(Object i : arr) System.out.print(i + " "); // 3 2 1
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_51566349/article/details/131201053