JAVA api (List,ArrayList,LinkedList的作用和实现)

JAVA api(Collection的概念和用法)
List依然是一个接口它继承了Collection的功能并且增加了自己的新功能。

List

我们先来大致的说一下List接口的特性:

1.List默认是有顺序的(按照输入元素的顺序输出)
2.List可以有重复元素。
3.List 在1.8版本以后 初始容量是空的 1.6版本以后是给 10 个容量(自动扩容:当容量不够的时候会自动增加容量)
4.我们也可以给List赋初始容量。

现在我们来看一下新的方法。

方法作用
void add(int index, E element)在索引出插入元素
E get(int index)得到该索引处的值
int indexOf(Object o)返回该值第一次出现的位置
int lastIndexOf(Object o)返回该值最后一次出现的位置
E remove(int index)删除对应索引的值
E set(int index, E element)将索引处的值替换为指定元素
		List<Integer> l1 = new ArrayList<Integer>(2);
		l1.add(2);
		l1.add(1);
		l1.add(3);
		//在指定地方插入指定元素(前者为索引值,后者为要存的值从0开始,注意长度)
		l1.add(3,4);
		System.out.println(l1);
		//根据索引获取位置元素
		System.out.println(l1.get(1));
		//返回第一次出现该元素的索引值
		System.out.println(l1.indexOf(1));
		//返回最后一次出现该元素的索引值
		System.out.println(l1.lastIndexOf(1));
		//删除对应索引值的元素(注意长度))
		l1.remove(1);
		System.out.println(l1);
		//替换(前者为索引值,后者为要存的值,从0开始,注意长度)
		l1.set(2,9);
		System.out.println(l1);
		//截取(含头不含尾)
		List<Integer> l2 = l1.subList(1, 3);
		System.out.println(l2);

此时我们依旧可以使用迭代,但是使用方式多了一种:

		Iterator<Integer> it = l1.iterator();
		for(Integer i: l1) {
			System.out.print(i+" ");
		}
		System.out.println();		
		ListIterator<Integer> it2 = l1.listIterator();
		//顺序遍历(从前往后)
		while (it2.hasNext()) {
			System.out.print(it2.next()+" ");
		}
		System.out.println();
		//逆向遍历(从后往前)(此处需要注意如果没有从前往后从后往前应该是用不了)
		while (it2.hasPrevious()) {
			System.out.print(it2.previous()+" ");
		}

ArrayList

ArrayList底层是用Object数组实现的,可以认为ArrayList是一个可改变大小的数组。随着越来越多的元素被添加到ArrayList中,其规模是动态增加的。而它自动扩容的原理是当长度不够后,调用copyOf()来给数组扩容,一般扩容大小为现在大小的1.5倍。
它有了数组的结构,当然也会有数组的优势:它的查询和遍历的速度是最快的(人家有下标啊),但是它的增加删除却不会很快(要么修改元素的后边元素全都前移要么全都后移简直要命)。
过于底层的东西,就不总结了,我还依稀记得学C++的时候手写这些东西的痛苦。我喜欢JAVA的地方就在于它封装的很棒,层次分明条理清晰。

LinkedList

LinkedList底层是个链式结构,双向链表,两端效率高。
1.LinkedList的查找没有ArrayList快但是增加和删除快速很多。
2.在空间上的存储是不连续的。
我们先来看几个方法。
第一套

方法名作用
public void addFirst(E e)元素添加至元素首部
public void addFirst(E e)元素添加至元素尾部
public E getFirst()得到首元素
public E getLast()得到尾元素
public E removeFirst()移除首元素
public E removeLast()移除尾元素
第二套
方法名作用
public boolean offerFirst(E e)元素添加至元素首部
public boolean offerLast(E e)元素添加至元素尾部
public E peekFirst()得到首元素
public E peekLast()得到尾元素
public E pollFirst()移除首元素
public E pollLast()移除尾元素
		LinkedList<Integer> l1= new LinkedList<Integer>();
		l1.add(1);
		l1.add(2);
		l1.add(3);
		l1.add(4);
		System.out.println("初始链表:"+l1);
		l1.addFirst(5);//首元素
		l1.addLast(6);//尾元素
		System.out.println("首尾添加:"+l1);
		System.out.println(l1.getFirst());//获取首元素
		System.out.println(l1.getLast());//取尾元素
		System.out.println(l1.removeFirst());//移除首元素
		System.out.println(l1.removeLast());//移除尾元素
		
		l1.offerFirst(1);
		l1.offerLast(2);
		System.out.println(l1);
		System.out.println(l1.peekFirst());
		System.out.println(l1.peekLast());
		System.out.println(l1.pollFirst());
		System.out.println(l1);
		Iterator it = l1.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}

ArrayList和LinkedList的区别

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值