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+" ");
		}	
	}
}

运行结果:

java stream 返回某个属性的list javalistremove返回_List


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+" ");
		}
	}
}

运行截图:

java stream 返回某个属性的list javalistremove返回_System_02


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 + " ");
		}
	}
}

运行结果:

java stream 返回某个属性的list javalistremove返回_System_03


总结:

1.内部存储结构区别: ArrayList、Vector是数组存储。LinkedList是链表存储。

2.线程安全区别:ArrayList、LinkedList线程不安全。Vector线程安全。

3.使用场景区别:使用线程同步的时候Vector类首选或者使用Collections工具类初始化时候同步。需要经常删除、增加使用LinkedList(链表结构)、经常需要查询迭代使用ArrayList(数组结构)。