学习Java第二十三天--集合框架之List集合

12.集合框架

12.1 集合的概念

  • 概念:对象的容器,存储对象的对象,可代替数值;
  • 特点:容器的工具类,定义了对多个对象进行操作的常用方法;
  • 位置:java.util.*;

12.2 Collection 体系集合

12.2.1 Collection体系概念图

  • Collection接口:该体系结构的根接口,代表一组对象,称为“集合”;
  • List接口的特点:有序、有下标、元素可重复;
  • Set接口的特点:无序、无下标、元素不能重复;
    在这里插入图片描述

12.2.2 Collection父接口

  • 特点:代表一组任意类型的对象,无序、无下标;
  • 方法:
    boolean add(Object obj) //添加一个对象
    boolean addAll(Collection c) //将一个集合中的所有对象添加到此集合中;
    void clear() //清空此集合中的所有对象;
    boolean contains(Object o) //检查此集合中是否包含o对象;
    boolean equals(Object o) //比较此集合是否与指定对象相等;
    boolean isEmpty() //判断此几个是否为空
    boolean remove(Object o) //在此集合中移除o对象;
    int size() //返回此集合中的元素个数;
    Object[] toArray() //将此集合转换成数组;

12.3 List集合

12.3.1 List子接口

  • 特点:有序、有下标、元素可以重复;
  • 继承父接口提供的共性方法,同时定义了一些独有的与下标有关的操作方法;
  • 方法:
    void add(int index , Object o) //在index位置插入对象o;
    boolean addAll(int index , Collection c) //将一个集合中的元素添加到此集合中的index位置;
    Object get(int index) //返回集合中指定位置的元素;
    List subList(int fromIndex , int toIndex) //返回formIndex和toIndex之间的集合元素;

12.3.2 List实现类

  • ArrayList【重点】:
    数组结构实现,查询快、增删慢;
    JDK1.2版本,运行效率快、线程不安全;
    JDK8的ArrayList,实际初始长度是0;
    首次添加元素时,需要实际分配数组空间,执行数组扩容操作;
    真正向数组中插入数据,(lazy懒)用的时候再创建,或再加载,有效的降低无用内存的占用;
import java.util.ArrayList;

public class TestArrayList {

	public static void main(String[] args) {
		
		ArrayList al = new ArrayList();//对象的容器,存储对象的对象
		
		boolean result = al.add("HelloWorld");//存储到了Object[]中的下标0的元素上

		System.out.println(result);
		
		Object obj = al.get(0);//将底层Object[]中下标0的元素返回
		
		System.out.println(obj);
		
		
	}

}

输出结果:

true
HelloWorld
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;

public class TestArrayListMethods {

	public static void main(String[] args) {
		
		//JDK7及之前, 无参构造方法直接创建长度为10的Object数组,用或不用都是是10(占内存)
		//JDK8之后,无参构造方法直接创建长度为0的数组,如果不用,不占空间,当插入元素时,再分配数组空间
		
		ArrayList al = new ArrayList();//实际的创建后的数组初始长度为0

		al.add("A");//
		al.add("B");
		al.add("C");//顺序插入
		
		al.add(1,"E");//按位置插入
		
		for(int i = 0 ; i < al.size(); i++) {//访问size()有效元素个数
			System.out.println(al.get(i));//get方法基于下标获取元素
		}
		
		System.out.println(al.toString());
		
		System.out.println();
		
		boolean removeResult = al.remove("E");
		
		Object removeObj = al.remove(1);
		System.out.println("被移除的对象:"+ removeObj);
		System.out.println(al.toString());
		
		al.set(0, "F");//根据下标替换成新元素
		System.out.println(al.toString());
		
		Object[] objs = al.toArray();
		for(int i = 0 ; i < objs.length ; i++) {
			System.out.println(objs[i] +"\t");
		}
		System.out.println();
		
		
		al.clear();//清空,空间还在,内容清空
		
		System.out.println(al.toString());
		System.out.println(al.size());
		
		System.out.println(al.isEmpty());//判断是否为空
		
		
		//工具方法中(服务集合的工具、服务数组的工具Arrays)
		List list = Arrays.asList("A" , "B" , "C" , "D" , "E");
		
		System.out.println(list);
	}

}

运行结果:

A
E
B
C
[A, E, B, C]

被移除的对象:B
[A, C]
[F, C]
F	
C	

[]
0
true
[A, B, C, D, E]
  • Vector:
  • 数组结构实现,查询快、增删慢;
  • JDK1.0版本,运行效率慢、线程安全;
import java.util.Vector;

public class TestVector {

	public static void main(String[] args) {
		
		//JDK提供了集合的使用方法
		
		//线程安全性高,但效率差
		Vector vector = new Vector();
		//Vector和ArrayList同类型,但在不在意线程安全时,ArrayList更效率
		
		//10万行逻辑代码,都是基于接口完成的操作
		//将上面的创建对象改为
		//List vector = new ArrayList();
		//就可以把所有的Vector相关代码改为ArrayList的
		//接口的好处:更容易更换具体实现
		
		vector.add(111);
		vector.add(222);
		vector.add(333);
		vector.add(0 , 666);
		
		for(int i = 0 ; i < vector.size() ; i++) {
			   System.out.println(vector.get(i));                                                                       
		}
		System.out.println(vector);
		
		
	}

}

运行结果:

666
111
222
333
[666, 111, 222, 333]
  • LinkedList:
    链表结构实现,增删快,查询慢;
import java.util.LinkedList;
import java.util.List;

public class TestLinkedList {

	public static void main(String[] args) {
		
		List ll = new LinkedList();//链表(first、last、size)
		
		ll.add("A");
		ll.add("B");
		ll.add("C");
		ll.add("D");
		
		for(int i = 0 ; i < ll.size() ; i++) {
			System.out.println(ll.get(i) +"\t");
		}
		System.out.println();
		System.out.println(ll.toString());
		
	}

}

运行结果:

A	
B	
C	
D	

[A, B, C, D]

万物皆对象,一切皆工具;

12.3.3 不同结构实现方式

在这里插入图片描述

  • ArrayList:必须开辟连续空间,查询快,增删慢;
  • LinkedList:无需开辟连续空间,查询慢,增删快;
发布了34 篇原创文章 · 获赞 7 · 访问量 1286

猜你喜欢

转载自blog.csdn.net/weixin_44257082/article/details/104665025