java day026 List接口

42 篇文章 1 订阅
42 篇文章 1 订阅

java day026 List接口

1.List接口概述

List接口特征:

  1. 数据存储可重复。
  2. 有序。添加顺序和保存顺序一致。

----| ArrayList

​ 可变长数组

----| LinkedList

​ 双向链表

----| Vector

​ 线程安全的可变长数组

2.List常用方法

增:

boollen add(E e);

List接口继承Collection接口 add方法, 使用操作与Collection接口一致,这里的添加采用的【尾插法】

boolean add(int index, E e);

List接口【特有方法】,在指定位置添加指定元素

boolean addAll(Collection<? extends E> c);

LIst接口继承Collection接口方法,使用方法与Collection接口一致,【尾插法】

boolean addAll(int index, Collection<? extends E> c);

List特有方法,在指定位置添加指定集合

删:

E remove(int index);

List特有方法,删除指定下标元素,并返回

boolean remove(Object obj);

继承方法,删除集合中指定元素

boolean removeAll(Collection<?> c);

继承方法,删除当前集合与指定集合重复元素

boolean retainAll(Collection<?> c);

继承方法,保留当前集合与指定集合重复元素

clear();

继承方法,清空集合所有元素

改:

E set(int index, E e);

List特有方法,替换指定元素替换指定下标元素,并返回被替换的元素

查:

int size();

继承方法,获取有效元素个数

boolean isEmpty();

继承方法,判断集合是否为空

boolean contains(Object obj);

继承方法,判断集合是否包含指定元素

boolean containsAll(Collection<?> c);

继承方法,判断集合是否包含指定子集

Object[] toArray();

继承方法,获取集合所有元素的Object数据

E get(int index);

List特有方法,获取指定下标元素

List subList(int fromIndex, int toIndex);

List特有方法,获取当前集合子集,从from下标到to下标结束【不包括toIndex下标元素】

int indexOf(Object obj);

List特有方法,获取指定下标元素第一次出现的位置

int lastIndexOf(Object obj);

List特有方法,获取指定下标元素最后一次出现的位置

3.代码演示

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

public class TestList {
	public static void main(String[] args) {
		
		List<String> a1 = new ArrayList<String>();
		List<String> a2 = new ArrayList<String>();
				
		a1.add("嘿嘿");
		a1.add("嘻嘻");
		a1.add("哈哈");
		a1.add("咳咳");
		a1.add("呸呸");
		
		a2.add("啊啊");
		
		//将a2集合中的元素加到a1中去
		a1.addAll(a2);
		
		System.out.println(a1);
		
		//在a1下标为2的地方添加元素
		a1.add(2, "诶诶");
		System.out.println(a1);
		
		在a1下标为2的地方添加集合
		a1.addAll(2, a2);
		System.out.println(a1);
		
		//删除a1下标为4的元素
		a1.remove(4);
		System.out.println(a1);
		
		//删除名为“呸呸”的元素
		a1.remove("呸呸");
		System.out.println(a1);
		
		//删除a1中所有a2集合元素
		a1.removeAll(a2);
		System.out.println(a1);
		
		//保留a1与a2相同的元素
		a1.addAll(a2);
		a1.retainAll(a2);
		System.out.println(a1);
				
		//清空元素
		a1.clear();
		System.out.println(a1);
	}
}
/*
输出结果:
[嘿嘿, 嘻嘻, 哈哈, 咳咳, 呸呸, 啊啊]
[嘿嘿, 嘻嘻, 诶诶, 哈哈, 咳咳, 呸呸, 啊啊]
[嘿嘿, 嘻嘻, 啊啊, 诶诶, 哈哈, 咳咳, 呸呸, 啊啊]
[嘿嘿, 嘻嘻, 啊啊, 诶诶, 咳咳, 呸呸, 啊啊]
[嘿嘿, 嘻嘻, 啊啊, 诶诶, 咳咳, 啊啊]
[嘿嘿, 嘻嘻, 诶诶, 咳咳]
[啊啊]
[]
*/
import java.util.ArrayList;
import java.util.List;

public class TestList2 {
	public static void main(String[] args) {
		
		List<String> a1 = new ArrayList<String>();
		List<String> a2 = new ArrayList<String>();
				
		a1.add("嘿嘿");
		a1.add("嘻嘻");
		a1.add("哈哈");
		a1.add("咳咳");
		a1.add("呸呸");
		
		a2.add("啊啊");
		
		System.out.println(a1);
		
		//将下标为2的元素替换,并返回被替换的元素
		String str = a1.set(2, "我晕");
		System.out.println(str);
		System.out.println(a1);
		
		//集合有效元素个数
		System.out.println(a1.size());
		
		//集合是否为空
		System.out.println(a1.isEmpty());
		
		//集合是否包含指定元素
		System.out.println(a1.contains("嘿嘿"));
		
		//集合是否包含指定集合
		System.out.println(a1.containsAll(a2));
		
		//将集合数据返回为Object数组
		Object[] obj = a1.toArray();
		for (int i = 0; i < obj.length; i++) {
			System.out.println(obj[i]);
		}
		
		//获取集合的子集
		List<String> aa = a1.subList(2, 4);
		System.out.println(aa);
		
		//获取指定下标元素
		String s = a1.get(1);
		System.out.println(s);
		
		a1.addAll(a1);
		System.out.println(a1);
		
		int i = a1.indexOf("嘿嘿");
		int j = a1.lastIndexOf("嘿嘿");
		System.out.println("嘿嘿第一次出现的下标:" + i + " 嘿嘿最后一次出现的下标:" + j);
	}	
}
/*
输出结果:
[嘿嘿, 嘻嘻, 哈哈, 咳咳, 呸呸]
哈哈
[嘿嘿, 嘻嘻, 我晕, 咳咳, 呸呸]
5
false
true
false
嘿嘿
嘻嘻
我晕
咳咳
呸呸
[我晕, 咳咳]
嘻嘻
[嘿嘿, 嘻嘻, 我晕, 咳咳, 呸呸, 嘿嘿, 嘻嘻, 我晕, 咳咳, 呸呸]
嘿嘿第一次出现的下标:0 嘿嘿最后一次出现的下标:5
*/

4.ArrayList概述

ArrayList是Java集合中很重要的一个组装,其底层保存数据的是一个Object数组。

需要了解的两个成员方法:

ensureCapacity();

判断方法,判断当前底层数组是否满足当前操作的需求

trimToSize();

节省空间,将底层数组缩容至有效元素个数

ArrayList细节问题

  1. 默认容量 private static final int DEFAULT_CAPACITY = 10;

  2. MAX_ARRAY_SIZE ==> Integer.MAX_VALUE - 8;

    这里的-8是为了给数组中的属性预留内存空间

ArrayList效率问题

ArrayList特征:

增删慢,查询快!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值