List集合

集合

为了保存数量不确定的数组,以及保存具有映射关系的数据。Java提供了集合类。集合类主要负责保存、盛装其他数据。因此集合也被称为容器类。
集合和数组的区别:
1.数组可以保存基本数据类型也可以保存引用数据类型,集合只能保存引用数据类型。
2.数组的长度是固定的而集合的长度是可变的
3.数组只能存储同种数据类型的元素 ,集合可以存储不同类型的元素
Java的集合主要由两个接口派生:Collection和Map,这两个时Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。下图显示了Collection体系。
在这里插入图片描述
Collection常用方法
boolean add(Object obj):添加一个元素
boolean addAll(Collection c):添加一个集合的元素 (给一个集合添加进另一个集合中的所有元素)
void clear():移除所有元素
oolean remove(Object o):移除一个元素
boolean removeAll(Collection c):移除一个集合的元素(移除一个以上返回的就是true) 删除的元素是两个集合的交集元素 如果没有交集元素 则删除失败 返回false
boolean contains(Object o):判断集合中是否包含指定的元素
boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(这个集合 包含 另一个集合中所有的元素才算包含 才返回true)
ean isEmpty():判断集合是否为空
Iterator iterator()(重点)
nt size():元素的个数
boolean retainAll(Collection c):获取两个集合的交集元素(交集:两个集
Object[] toArray()
下面给出常用方法的使用

import java.util.ArrayList;
import java.util.Collection;

public class CollectionDeom {
    public static void main(String[] args) {
        Collection collection = new ArrayList();
        collection.add("School");
        collection.add("Home");
        System.out.println(collection);
        Collection collection1 = new ArrayList();
        collection1.add("Libiary");
        collection1.add("restaurant");
        System.out.println(collection);
        collection1.addAll(collection);
        System.out.println(collection1);
        collection1.removeAll(collection);
        System.out.println(collection);
        System.out.println(collection.contains("school"));
        System.out.println(collection.isEmpty());
        System.out.println(collection.size());
    }
}

集合的遍历
方法1.
将集合转化为数组然后遍历输出每个元素

public class CollectionDeom {
    public static void main(String[] args) {
        Collection collection = new ArrayList();
        collection.add("School");
        collection.add("Home");
        collection.add("Library");
        collection.add("restaurant");
        Object [] o = collection.toArray();
        for(Object obj: o){
            System.out.println((String)obj);
        }

    }
}

方法2.

public class CollectionDeom {
    public static void main(String[] args) {
        Collection collection = new ArrayList();
        collection.add("School");
        collection.add("Home");
        collection.add("Library");
        collection.add("restaurant");
        Iterator iterator = collection.iterator();
        while(iterator.hasNext()){
            Object o = iterator.next();
            System.out.println((String)o);
        }

    }
}

List

元素有序,并且每一个元素都存在一个索引.元素可以重复。
List常用方法
void add(int index,E element): 在指定索引处添加元素
E remove(int index):移除指定索引处的元素 返回的是移除的元素
E get(int index):获取指定索引处的元素
E set(int index,E element):更改指定索引处的元素 返回的而是被替换的元素

 import java.util.ArrayList;
import java.util.List;

public class ListDemo {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(1,1);
        list.add(1,2);
        list.add(3,3);
        System.out.println(list);
        list.remove(1);
        System.out.println(list);
        int i = (int)list.get(0);
        System.out.println(i);
        list.set(1,100);
        System.out.println(list);
        list.remove(1);
        System.out.println(list);
    }
    }

List遍历
方法1.
使用size和ge’t

import java.util.ArrayList;
import java.util.List;

public class ListDemo {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(0,1);
        list.add(1,2);
        list.add(2,3);
        
        for(int i = 0;i < list.size();i++){
            Object o = list.get(i);
            System.out.println((int)o);
        }
    }
}

方法2.
利用ListIterator

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class ListDemo {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(0,1);
        list.add(1,2);
        list.add(2,3);

        ListIterator listIterator = list.listIterator();
        while(listIterator.hasNext()){
            Object o = listIterator.next();
            System.out.println((int)o);
        }

    }
}

List子类
List的三个子类的特点
ArrayList:底层数据结构是数组,查询快,增删慢。线程不安全,效率高。
Vector:底层数据结构是数组,查询快,增删慢。线程安全,效率低。
LinkedList:底层数据结构是链表,查询慢,增删快。线程不安全,效率高。
我们可以根据需求,灵活选取需要的集合

ArrayList

ArrayList 是实现 List 接口的动态数组,所谓动态就是它的大小是可变的。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。

每个 ArrayList 实例都有一个容量,该容量是指用来存储列表元素的数组的大小。默认初始容量为 10。随着 ArrayList 中元素的增加,它的容量也会不断的自动增长。在每次添加新的元素时,ArrayList 都会检查是否需要进行扩容操作,扩容操作带来数据向新数组的重新拷贝,所以如果我们知道具体业务数据量,在构造 ArrayList 时可以给 ArrayList 指定一个初始容量,这样就会减少扩容时数据的拷贝问题。当然在添加大量元素前,应用程序也可以使用 ensureCapacity 操作来增加 ArrayList 实例的容量,这可以减少递增式再分配的数量。

注意,ArrayList 实现不是同步的。如果多个线程同时访问一个 ArrayList 实例,而其中至少一个线程从结构上修改了列表,那么它必须保持外部同步。所以为了保证同步,最好的办法是在创建时完成,以防止意外对列表进行不同步的访问:
构造函数
ArrayList 提供了三个构造函数:
ArrayList():默认构造函数,提供初始容量为 10 的空列表。
ArrayList(int initialCapacity):构造一个具有指定初始容量的空列表。
ArrayList(Collection<? extends E> c):构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。

import java.util.*;
public class Test {
	public static void main(String[] args) {
		ArrayList<Integer> list = new ArrayList();
		list.add(1);
		list.add(2);
		list.add(3);
		list.add(4);
	}
}

基本方法

方法作用内部实现
boolean contains(Object o)返回列表中包含指定的元素内部调用indexOf()方法进行判断,遍历列表进行查询,需要注意的是需要实现equals方法比较对象是否相等
E get(int index)返回此列表中指定位置上的元素内部主要两步,首先检查索引,然后获取数组对象索引的元素
E set(int index, E element)用指定元素替代指定位置上的元素需要注意的是该方法还会返回老的元素的值,内部主要三步,首先检查索引,然后获取老的元素,赋值并返回
E remove(int index)删除指定位置上的元素内部实现步骤为 1.检查索引 2.获取老的元素 3.将index后的元素向前移动 4.最后一个元素置为null并返回老的元素
boolean remove(Object o)删除列表中首次出现指定元素(如果存在)内部实现为 1.判断为NULL,若是则遍历并删除 2.若不是则遍历并删除
import java.util.*;
public class Test {
	public static void main(String[] args) {
		ArrayList<Integer> list = new ArrayList();
		list.add(1);
		list.add(2);
		list.add(3);
		list.add(4);
		boolean b = list.contains(2);
		int i = list.get(2);
		list.set(0,0);
		list.remove(1);
	}
}

遍历ArrayList
方法1.for循环

for (int i = 0; i < arrayList.size(); i++) {
    System.out.println(arrayList.get(i));
}

方法2.迭代器

Iterator<Integer> ite = arrayList.listIterator();
while (ite.hasNext()){
    System.out.println(ite.next());
}

Vector

Vector 可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。不过,Vector 的大小是可以增加或者减小的,以便适应创建 Vector 后进行添加或者删除操作。

Vector 实现 List 接口,继承 AbstractList 类,所以我们可以将其看做队列,支持相关的添加、删除、修改、遍历等功能。
基本方法
public void addElement(E obj) //向集合中添加一个元素
public E elementAt(int index)//获取索引位置的集合
public Enumeration elements()//迭代器

        Vector vector = new Vector();
        vector.addElement(100);
        vector.addElement(200);
        vector.addElement(300);
  
        Enumeration elements = vector.elements();
        while (elements.hasMoreElements()){
            Object o = elements.nextElement();
            System.out.println(o);

        }

遍历Vector
1.随机访问

    for(int i = 0 ; i < vec.size() ; i++){
           value = vec.get(i);
        }

2、迭代器

    Iterator it = vec.iterator();
        while(it.hasNext()){
            value = it.next();
            //do something
        }

3、for 循环

    for(Integer value:vec){
            //do something
        }

3Enumeration 循环

    Vector vec = new Vector<>();
        Enumeration enu = vec.elements();
        while (enu.hasMoreElements()) {
            value = (Integer)enu.nextElement();
        }

LinkedList

LinkedList 与 ArrayList 一样实现 List 接口,只是 ArrayList 是 List 接口的大小可变数组的实现,LinkedList 是 List 接口链表的实现。基于链表实现的方式使得 LinkedList 在插入和删除时更优于 ArrayList,而随机访问则比 ArrayList 逊色些。
LinkedList 实现所有可选的列表操作,并允许所有的元素包括 null。
构造方法
在源码中,LinkedList主要提供了两个构造方法,
1.public LinkedList() :空的构造方法,啥事情都没有做
2.public LinkedList(Collection<? extends E> c) : 将一个元素集合添加到LinkedList中
增添方法
add(E e): 将指定元素添加到此列表的结尾
add(int index, E element):在此列表中指定的位置插入指定的元素。
addAll(Collection<? extends E> c):添加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序。
addAll(int index, Collection<? extends E> c):将指定 collection 中的所有元素从指定位置开始插入此列表。
addFirst(E e): 将指定元素插入此列表的开头。
addLast(E e): 将指定元素添加到此列表的结尾。
删除方法
remove(Object o):从此列表中移除首次出现的指定元素(如果存在)。
clear(): 从此列表中移除所有元素。
remove():获取并移除此列表的头(第一个元素)。
remove(int index):移除此列表中指定位置处的元素。
remove(Objec o):从此列表中移除首次出现的指定元素(如果存在)。
removeFirst():移除并返回此列表的第一个元素。
removeFirstOccurrence(Object o):从此列表中移除第一次出现的指定元素(从头部到尾部遍历列表时)。
removeLast():移除并返回此列表的最后一个元素。
removeLastOccurrence(Object o):从此列表中移除最后一次出现的指定元素(从头部到尾部遍历列表时)。
查找方法
get(int index):返回此列表中指定位置处的元素。
getFirst():返回此列表的第一个元素。
getLast():返回此列表的最后一个元素。
indexOf(Object o):返回此列表中首次出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。
lastIndexOf(Object o):返回此列表中最后出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值