Java基础-集合框架之List


前面简单介绍集合框架和迭代器,下面来了解下List。
List接口下的一共三个实现类:ArrayList,Vector,LinkedList。

List集合的特有功能概述

* void add(int index,E element)
* E remove(int index)
* E get(int index)
* E set(int index,E element)

List迭代器(ListIterator)

* boolean hasNext()是否有下一个
* boolean hasPrevious()是否有前一个
* Object next()返回下一个元素
* Object previous();返回上一个元素

	public static void main(String[] args) {
		List<String> list = new ArrayList<>();
		list.add("a ");
		list.add("b ");
		list.add("c ");
		list.add("d ");
		ListIterator<String> iterator = list.listIterator();
		while(iterator.hasNext()) {
			System.out.print(iterator.next());
		}
		System.out.println();
		//此时指针已到达末尾,所以会逆着输出一遍。若上面的while循环和下面交换,则达不到此效果
		while(iterator.hasPrevious()) {
			System.out.print(iterator.previous());
		}
	}
	/*outPut:
	 * a b c d
	 * d c b a
	 */

Vector类特有功能

* public void addElement(E obj)
* public E elementAt(int index)
* public Enumeration elements()

使用上述特有功能进行迭代

	public static void main(String[] args) {
		Vector<String> vector = new Vector<>();
		vector.addElement("a ");
		vector.addElement("b ");
		vector.addElement("c ");
		vector.addElement("d ");
		Enumeration<String> enumeration = vector.elements();
		while(enumeration.hasMoreElements()) {
			System.out.print(enumeration.nextElement());
		}
	}
	/*outPut:
	 * a b c d
	 */

LinkedList类特有功能

* public void addFirst(E e)及addLast(E e)
* public E getFirst()及getLast()
* public E removeFirst()及public E removeLast()
* public E get(int index);

使用LinkedList模拟 栈 数据结构

class Stack {
	private LinkedList linkedList;
	public Stack() {
		linkedList = new LinkedList();
	}
	public boolean empty() {
		return linkedList.isEmpty();
	}
	public void push(Object obj) {
		linkedList.addFirst(obj);
	}
	public Object pop() {
		return linkedList.removeFirst();
	}
}

测试

	public static void main(String[] args) {
		Stack stack = new Stack();
		stack.push("a ");
		stack.push("b ");
		stack.push("c ");
		stack.push("d ");
		while(!stack.empty()) {
			System.out.print(stack.pop());
		}
	}
	/*outPut:
	 * d c b a
	 */

ArrayList

下面我们通过一个例子来学习ArrayList

去除ArrayList中重复的字符串元素

	/*
	 * 思路:创建一个新集合,迭代需去重集合的元素,每次判断新集合中是否包含该元素,无则添加
	 */
	public static ArrayList<String> distinct(ArrayList<String> list) {
		ArrayList<String> newList = new ArrayList<>();
		Iterator<String> iterator = list.iterator();
		while(iterator.hasNext()) {
			String temp = iterator.next();
			if(!newList.contains(temp)) {
				newList.add(temp);
			}
		}
		return newList;
	}

测试:

	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<>();
		list.add("a ");
		list.add("c ");
		list.add("a ");
		list.add("b ");
		list.add("d ");
		list.add("a ");
		list.add("b ");
		list.add("c ");
		System.out.println(list);
		ArrayList<String> newList = distinct(list);
		System.out.println(newList);
	}
	/*outPut:
	 * [a , c , a , b , d , a , b , c ]
	 * [a , c , b , d ]
	 */

更多功能请查看API


总结

先讲讲数组和链表的区别:

数组

查询快修改也快

增删慢

链表

查询慢,修改也慢

增删快

List的三个子类的特点:

ArrayList:

底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。

Vector:

底层数据结构是数组,查询快,增删慢。
线程安全,效率低。

LinkedList:

底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。

Vector相对ArrayList查询慢(线程安全的)
Vector相对LinkedList增删慢(数组结构)

Vector和ArrayList的区别

Vector是线程安全的,效率低
ArrayList是线程不安全的,效率高

共同点:都是数组实现的

ArrayList和LinkedList的区别

ArrayList底层是数组结果,查询和修改快
LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢

共同点:都是线程不安全的


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值