java知识day15(List集合)

List

List继承了Collection,是有序的列表。

实现类有ArrayList、LinkedList、Vector、Stack等
ArrayList是基于数组实现的,是一个数组队列。可以动态的增加容量!
LinkedList是基于链表实现的,是一个双向循环列表。可以被当做堆栈使用!
Vector是基于数组实现的,是一个矢量队列,是线程安全的!
Stack是基于数组实现的,是栈,它继承与Vector,特性是FILO(先进后出)!

使用场景

在实际的应用中如果使用到队列,栈,链表,首先可以想到使用List。不同的场景下面使用不同的工具,效率才能更高!

  1. 当集合中对插入元素数据的速度要求不高,但是要求快速访问元素数据,则使用ArrayList!
  2. 当集合中对访问元素数据速度不做要求不高,但是对插入和删除元素数据速度要求高的情况,则使用LinkedList!
  3. 当集合中有多线程对集合元素进行操作时候,则使用Vector!但是现在BVector现在一般不再使用,如需在多线程下使用,可以用CopyOnWriteArrayList,在java.util.concurrent包下。
  4. 当集合中有需求是希望后保存的数据先读取出来,则使用Stack!
/*
 * List集合存储一个字符串类型,并遍历!
 * */
public class ListDemo {
	
	public static void main(String[] args) {
		
		//创建List集合对象 
		List list = new ArrayList() ;
		
		//添加字符串元素
		list.add("张三") ;
		list.add("李四") ;
		list.add("王五") ;
		
		//迭代器遍历:List 继承 自 Collection
		Iterator it = list.iterator() ;
		while(it.hasNext()) {
			String s = (String)(it.next()) ;
			System.out.println(s);
		}
	}
}
/*
 * List集合特点:
 * 	  存储和取出一致,并且允许元素可以重复!
 * */
public class ListDemo2 {
	
	public static void main(String[] args) {
		
		//创建List集合对象 
		List list = new ArrayList() ;
		
		list.add("hello") ;
		list.add("hello") ;
		list.add("hello") ;
		list.add("world") ;
		list.add("anddroid") ;
		list.add("anddroid") ;
		list.add("php") ;
		
		//迭代器遍历:List 继承 自 Collection
		Iterator it = list.iterator() ;
		while(it.hasNext()) {
			String s = (String)(it.next()) ;
			System.out.println(s);
		}
	}
}
特有功能:
  • void add(int index,Object element):在指定的位置处添加指定的元素
  • Object get(int index):获取指定位置处的元素(重点)
  • Object remove(int index):删除指定位置的元素
  • ListIterator listIterator():列表迭代器
  • set(int index,Object element):将指定位置处元素进行替换(修改) 所指定的元素
List集合有几种遍历方式:
  • Obejct[] toArray()
  • Iterator iterator()
  • size()/get(int index):普通for
  • ListIterator listIterator()
public class ListDemo4 {

	public static void main(String[] args) {
		
		//创建List集合对象
		List list = new ArrayList() ;
		
		//添加元素
		list.add("hello") ;
		list.add("world") ;
		list.add("java") ;
		
//		//获取列表迭代器
		ListIterator lit = list.listIterator() ;
//		//循环遍历
		while(lit.hasNext()) {
			String s = (String)(lit.next()) ;
			System.out.println(s);
		}
		System.out.println("---------------------------------");
		
		//逆序遍历
		while(lit.hasPrevious()) {
			String s = (String)(lit.previous()) ;
			System.out.println(s);
		}
	
	}
}
迭代器依赖于集合存在,使用迭代器遍历元素,是不能使用集合添加元素的!
使用迭代器遍历元素,如果使用集合添加元素,就会出现一个并发 修改异常!
如何解决呢?
  • 1)使用迭代器遍历元素,使用迭代器添加元素,
  • 通用的迭代器Iterator 没有添加功能,无法实现,使用List里面列迭代器
  • 2)使用集合遍历,集合添加元素
  • 普通for循环
  • size()/get(int index)相结合
public class ListTest {
	
	public static void main(String[] args) {
		
		//创建一个List集合
		List list = new ArrayList() ;
		
		//给集合中添加元素
		list.add("hello") ;
		list.add("world") ;
		list.add("java") ;
		
		for(int x = 0 ; x < list.size() ; x ++) {
			String s = (String)(list.get(x)) ;
			//判断
			if("world".equals(s)) {
				//集合添加
				list.add("javaee") ;
			}
		}
		System.out.println("list:"+list);
	}
}

List集合的三个子实现类的特点:

ArrayList:
  • 特点:底层数据结构是数组,查询快,增删慢
  • 从线程角度: 线程不安全----->不是同步的----->执行效率高!
  • 如果以后在笔试题,没有告诉你具体的集合是谁,都是使用ArrayList
LinkedList:
  • 特点:底层数据结构是链接链表(链表) ,查询慢,增删快
  • 从线程角度: 线程不安全---->不同步------> 执行效率高
Vector:
  • 特点:底层数据 结构是数组,查询快,增删慢
  • 线程角度: 线程安全的----->同步的------->执行效率低!
  • 这个三个子实现类都有共性特点: 存储和取出一致,并且元素可以重复的!
Vector类的特有功能:
  • Vector中将元素都称为"组件"
  • public void addElement(Object obj) :------ > add(Object obj) 给集合中添加元素
  • public Object elementAt(int index)-------- >get(int index ):通过索引值获取指定的元素
  • public Enumeration elements()------> Iterator iterator() :获取迭代器
  • Enumeration:接口 (枚举接口(Vector集合的向量组件的枚举))
  • boolean hasMoreElements()----> 类似于: boolean hasNext() :判断是否存在下一个可以遍历的元素
  • Object nextElement() ----->类似于 Object next():获取下一个元素
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值