【CXY】JAVA基础 之 List

概述:

    1.有序的(序号(索引)的序,不是顺序的序,相对Set对比产生的说法),可重复集合

    2.List是Collection的子接口,所以List可以使用Collection全部方法。(见本人博客相关文章)

    3.除此之外List还有自己特殊的方法,索引相关的操作(本文重点做这部分的介绍)

    4.删除的时候防止 躺着中枪   

    5.ListIterator:专门操作list的迭代器(本例未做详解,有兴趣请看api)

    6.两个基本实现类 ArrayList(非线程安全) 和 Vector(线程安全)

       1.Vector是一个古老的遗留类(性能差),不推荐使用。

       2.Vector(Stack) 栈数据结构,使用LinkedList代替

    7.Arrays.ArrayList是一个长度固定的List,只能遍历不能 操作

    8.LinkedList

       1.可以用来做双端队列和栈

       2.由于以链表形式保存,所以随机访问性能较差,但是迭代,插入、删除的性能比较好,因为可以直接改变指针所指地址(数据结构知识)

package com.cxy.collection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

/**
 * @author cxy
 */
public class ListTest
{
	public static void main(String[] args)
	{
		List l=new ArrayList();
		l.add("幼儿园");
		l.add("小学");
		l.add("幼儿园");
		l.add("中学");
		l.add("大学");
		System.out.println(l);  //可以看出可以有重复数据
		
		System.out.println("索引为3的元素是:"+l.get(3));
		
		System.out.println("幼儿园第一次出现的索引:"+l.indexOf("幼儿园"));
		System.out.println("幼儿园第最后一次出现的索引:"+l.lastIndexOf("幼儿园"));
		
		l.set(3, "初中");  //类似修改操作 
		l.add(4,"高中");   //插入
		System.out.println(l);
		
		l.remove("幼儿园"); //会删除第一个找到的 幼儿园
		System.out.println(l);
		l.remove(new AA()); //由于AA的equals方法返回true,导致第一个元素被误认为是和AA相等的,于是躺着就中枪了
		System.out.println(l);
		l.remove(new BB()); //BB的equals方法返回false,所以List没有找到相等的元素删除。
		System.out.println(l);
		l.remove(0);  //通过序号删除
		System.out.println(l);
		
		ArrayList l1=new ArrayList();
		l1.ensureCapacity(64); //大的数据集合,使用这个方法一次分配好空间,避免频繁多次分配,提高性能
		l1.trimToSize();  //调整至使用空间大小,避免内存浪费。
		
		try
		{
			List temp = Arrays.asList("小学","中学","大学");
		    temp.remove(0);
		}catch(Exception e)
		{
			System.out.println("temp是一个固定长度的list,只能遍历不能操作");
		}
		
		LinkedList ll = new LinkedList();
		ll.add("aaa");
		ll.add("bbb");
		ll.add("ccc");
		ll.add("ddd");
		System.out.println("原始:"+ll);
		ll.addLast("zzz");  //队列--入队
		ll.removeFirst(); //队列--出队
		System.out.println("队列操作:"+ll);
		ll.addFirst("kkk"); //栈--入栈
		System.out.println("kkk入栈:"+ll);
		ll.removeFirst(); //栈--出栈
		System.out.println("kkk出栈:"+ll);
		ll.removeLast();  //体现双端队列
		System.out.println("=========================");
		ll = new LinkedList();
		ll.add("aaa");
		ll.add("bbb");
		ll.add("ccc");
		ll.add("ddd");
		System.out.println("重新初始化:"+ll);
		ll.push("kkk");  //栈--入栈
		System.out.println("kkk入栈:"+ll);
		ll.pop();  //栈--出栈
		System.out.println("kkk出栈:"+ll);
		
		ll.offer(""); //队列--入队
		ll.offerFirst("");  //返回true的addFirst
		ll.offerLast("");  //返回true的addLast
		
		ll.poll(); //获取并删除第一个
		ll.pollFirst();  //获取并删除第一个
		ll.pollLast();  //获取并删除最后一个
		
		ll.peekFirst(); //获取不删除第一个
		ll.peekLast();  //获取不删除最后一个
		
		ll.removeFirstOccurrence("aaa"); //删除第一个出现的aaa
		ll.removeLastOccurrence("aaa"); //删除最后一个出现的aaa
	}
}


class AA
{
	@Override
	public boolean equals(Object obj)
	{
		return true;
	}
}

class BB
{
	@Override
	public boolean equals(Object obj)
	{
		return false;
	}
}

相关文章连接:

《JAVA基础 之 Collection》

《JAVA基础 之 Set》

 

声明:

1.原创文章,转载请标明并加本文连接。

2.更详尽的API请参见  http://docs.oracle.com/javase/7/docs/api/

3.文章反映个人愚见,如有异议欢迎讨论指正 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值