Java List接口详解

List接口

List接口继承了Collection接口,它是代表有序的队列。使用此接口可以精确的控制每一 个元素插入的位置。能够使用索引来访问List中元素。
List接口中的方法
add(e)—添加元素
get(index)—获取元素
remove(index)—按索引删除元素并返回该元素
remove(object o)—按元素删除该元素并返回布尔值 contains(object o)–是否含有该元素
set(index,e)—根据索引将元素值改变
indexOf(object o)—返回该元素索引
size()—返回集合中元素数量
List子类特点
ArrayList: 底层数据结构是数组,查询快,增删慢,线程不安全,效率高
Vector: 底层数据结构是数组,查询快,增删慢,线程安全,效率低
LinkedList: 底层数据结构是链表,查询慢,增删快,线程不安全,效率高
这三个类都重写toString方法,返回的不是地址值而是数据字符串
ArrayList类和Vector类
ArraylList和Vector一样,都是通过数组实现的,但是Vector是线程安全的。和ArrayList相比,其中的很多方法都通过同步(synchronized)处理来保证线程安全。如果你的程序不涉及到线程安全问题,那么使用ArrayList是更好的选择(因为Vector使用synchronized,必然会影响效率)。
二者之间还有一个区别,就是扩容策略不一样。在List被第一次创建的时候,会有一个初始大小,随着不断向List中增加元素,当List认为容量不够的时候就会进行扩容。Vector缺省情况下自动增长原来一倍的数组长度,ArrayList增长原来的50%。
ArrayList存储字符并遍历
代码:

import java.util.ArrayList;
import java.util.Iterator;

public class ArrayListDemo {

	public static void main(String[] args) {
		 
		ArrayList<String> array=new ArrayList<>();
		array.add("a");
		array.add("b");
		array.add("c");
		array.add("d");array.add("e");
		array.add("f");
		System.out.println(array.toString());
		System.out.println("-------");
		//遍历(迭代器)
		Iterator<String> it =array.iterator();
		while(it.hasNext() ) {
			String s=it.next();
			System.out.print (s+" ");
		}
		System.out.println();
		//遍历(for循环)
		for(int i=0;i<array.size();i++) {
			String s=array.get(i);
			System.out.print (s+" ");
		}
	   System.out.println();
		//遍历(增强for)
		for(String s:array) {
			System.out.print(s+" ");
		}	
	}
}

运行结果:

在这里插入图片描述
Vector存储字符并遍历
vector特有功能:
1.添加功能:addElement(Object o)
2.获取功能:elementAt(int index)
代码:

import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;

public class VectorDemo {

	public static void main(String[] args) {
		Vector<String> v = new Vector<>();
		v.addElement("a");
		v.add("b");
		v.addElement("c");
		v.add("d");
		v.addElement("e");
		v.add("f");
		System.out.println(v.toString());
		System.out.println("-------");
		// 遍历(迭代器)
		Iterator<String> it = v.iterator();
		while (it.hasNext()) {
			System.out.print(it.next() + " ");
		}
		System.out.println();
		// 遍历(for循环)
		for (int i = 0; i < v.size(); i++) {
			String s = v.elementAt(i);
			System.out.print(s + " ");
		}
		System.out.println();
		// 增强for
		for (String s : v) {
			System.out.print(s + " ");
		}
		System.out.println();
		//vector特有的遍历
		Enumeration<String> en=v.elements();
		while(en.hasMoreElements()) {
			String s=en.nextElement();
			System.out.print(s+" ");
		}
	}
}

运行截图:
在这里插入图片描述
LinkedList类
LinkedList内部存储用的数据结构是链表。链表的特点:适合动态的插入和删除。访问遍历比较慢。另外不支持get,remove,insert方法,可以当做堆栈、队列以及双向队列使用。
代码:

import java.awt.List;
import java.util.LinkedList;

public class LinkedListDemo {

	public static void main(String[] args) {
		LinkedList<String> link = new LinkedList<>();
		link.add("a");
		link.add("b");
		link.add("c");
		link.add("d");
		link.addFirst("s");
		link.addLast("z");
 System.out.println(link.toString());
		for (String s : link) {
			System.out.print(s + " ");
		}
	}
}

运行结果:
在这里插入图片描述
总结:
1.内部存储结构区别: ArrayList、Vector是数组存储。LinkedList是链表存储。
2.线程安全区别:ArrayList、LinkedList线程不安全。Vector线程安全。
3.使用场景区别:使用线程同步的时候Vector类首选或者使用Collections工具类初始化时候同步。需要经常删除、增加使用LinkedList(链表结构)、经常需要查询迭代使用ArrayList(数组结构)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

扎克风暴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值