集合的相关知识-下

文章详细介绍了Java中的List接口,强调其有序可重复的特性,并列举了相关操作如get、set、indexOf等。接着,文章通过示例展示了ArrayList的使用,包括无参构造器的作用以及泛型安全问题。此外,还提到了ArrayList和LinkedList的区别,LinkedList基于双向数据链表,元素空间不连续。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、List接口

List接口继承了Collection父接口,有序可重复。有序表现为:1、存和取的顺序一样  2、可以像数组一样可以通过下标进行元素的访问。

  • get(int index):根据提供的下标获取对应的元素值
  • set(int index,Object value):将指定下标位置的而元素修改为对应的值
  • indexOf(Object obj):获取指定元素对应的下标
  • lastIndexOf():获取元素最后一次出现的下标
  • 循环遍历:List集合的遍历有三种方式 1.使用迭代器【通用的迭代方式 万能的迭代】2.使用foreach 3.可以使用普通的for循环
  • remove(int index):根据下标删除指定位置的元素
public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();
		list.add("stu1");
	    list.add("stu2");
	    list.add("stu3");
	    list.add("stu4");

	    System.out.println("集合的长度:" + list.size());
	    System.out.println("第2个元素是:" + list.get(1));
	    System.out.println("stu3元素的下标是:" + list.indexOf("stu3"));
	    System.out.println("元素最后一次出现的下标:" + list.lastIndexOf("stu4"));
	    System.out.println("删除第三个元素"+ list.remove(2));
	    System.out.println(list);
}

上述代码:刚开始遇见了一个问题:意思是说在使用ArrayList集合时并没有显示的指定集合中存储什么类型的元素,会产生安全隐患,这涉及到泛型安全机制的问题。后来在ArrayList后加了string解决了该问题。

二、List接口的常用实现类

2.1 ArrayList

package test.setof;

import java.util.Arrays;
import java.util.Collection;

public class ArrayList01<E> {
	//ArrayList源码分析
	private static final int DEFAULT_CAPACITY =10;

	private static final Object[] EMPTY_ELEMENTDATA = {};
	
	private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA= {};
	transient Object[] elementData;
	private int size;
	
	public ArrayList01() {
		this.elementData = new Object[2];
	}
	
	public ArrayList01(int initialCapacity) {
		if (initialCapacity > 0) {
			this.elementData = new Object[initialCapacity];
		}else if (initialCapacity==0) {
			this.elementData=EMPTY_ELEMENTDATA;
		}else {
			throw new IllegalArgumentException("Illegal Capacity:"+initialCapacity);		
		}
	}
	public ArrayList01(Collection<? extends E>c) {
		elementData = c.toArray();
		if ((size=elementData.length) != 0) {
			if (elementData.getClass()!= Object[].class) {
				elementData=Arrays.copyOf(elementData, size,Object[].class);
				
			}else {
				this.elementData=EMPTY_ELEMENTDATA;
			}
		}
	}

	public static int getDefaultCapacity() {
		return DEFAULT_CAPACITY;
	}
	
	public static Object[] getDefaultcapacityEmptyElementdata() {
		return DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
	}
	
}

为什么在无参构造器中创建一个长度为0的数组?

无参构造器的作用是将elementData初始化一个Object类型的空数组。this.elementData=EMPTY_ELEMENTDATA;这是初始化一个长度为0的空数组

2.2 LinkedList

LinkedList底层是基于一个双向数据链表实现,链表中每个元素对应的空间不连续(随机的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yyainiyaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值