黑马程序员——集合之List

------- android培训java培训、期待与您交流! ----------

一、集合概述

集合的框架:

---------丨Collection                 单列 集合的超类

---------------------------丨List              有序且可以重复的

---------------------------丨Set       无序且不可以重复的


二、List的体系

List的三个子类:

-----丨List

--------------丨ArrayList 线程非安全的,查询快,增删慢

--------------丨LinkedList 线程非安全的,查询慢,增删快

--------------丨 Vector 线程安全的,查询快,增删慢,效率低


三、List三个子类特性的出现原因

ArrayList:

ArrayList容器底层是通过数组来存储数据的。由于是由数组实现,所以可以通过数组的方法来完成查询动作,查询效率高。ArrayList的初始容量为10,一旦出现容量不够的情况时,数组长度增加1/2,数组的长度增长要通过copy来完成,数组copy的过程很费时,所以增删慢。

注:所以一般创建ArrayList集合时,都会根据需求设置初始容量,避免出现容量不够,或增长后浪费大量容量。


LinkedList:

LinkedList底层是通过链表结构实现,链表的实质也是数组,链表的元素一半为数据,一半指向下一个元素的地址,合起来为一个元素。这样增删数据

快,但是查找只能逐个元素的查找,所以查找慢。


LinkedList的特点:LinkedList是一个很强大的链表集合。他是一个普通的集合,也模拟了2种数据结构。

1、队列结构:先入先出的存储方式,通过offer()加入元素在结尾,poll()取出开头元素

2、栈结构:先入后出,通过push()添加元素在开头,pop()取出开头元素


Vector:

VERTOR是一个线程安全的数组,查询快,增删慢,效率低

VECTOR的构造器是enumeration。在IO中的SequenceInputStream()构造中传入一个enumeration可以遍历多个输入流,完成合并需求。


四、listIterator

相对Collection实现的iterable接口中的iterator(),list提供了一个listIterator(),listIterator()在ArrayList和AbstractSequentialList得到了实现,查找LinkedList源码找不到Iterator()和listIterator()的实现方法。

listIterator提供了更多的方法,hasPrevious()、previous()、add()、set()是常用的几个。


五、代码演示

基础应用:

package cn.itcast.collection;

import java.util.ArrayList;
import java.util.Collection;

/**
 * Collection成员方法:
 * 添加
 * boolean add(Object obj)
 * boolean addAll(Collection c)
 * 删除
 * boolean remove(Object obj)
 * boolean removeAll(Collection c)
 * 判断
 * boolean contains(Object obj)
 * boolean containsAll(Collection c)
 * boolean isEmpty()
 * 获取
 * Iterator<E> iterator()
 * 长度
 *int size()
 *
 *交集
 *boolean retianAll(Collection c)
 *
 *集合转数组
 *Object[] toArray()
 * 数组没有.length()方法,只有.length成员,字符串有.length(),集合也没有.length(),集合的是.size()
 * */
public class CollectionBasicFunction {

	public static void main(String[] args) {
		//集合的练习,首先创建集合对象,Collection没有直接子类,只有字接口,创建子接口的实现类
		Collection c=new ArrayList();
		System.out.println("add添加成功,返回boolean:"+c.add("hello"));
		c.add("world");
		//直接 暴力清除c的所有元素
		//c.clear();
		
		//删除单个元素
		//c.remove("world");
		System.out.println("判断是否为空:"+c.isEmpty());
		//包含功能
		System.out.println("包含功能,返回Boolean:"+c.contains("hello"));
		System.out.println("集合的size方法返回长度:"+c.size());
		System.out.println(c.toString());
	}

}
2种遍历方式:

for(int i=0;i<list.size();i++){
<span style="white-space:pre">			</span>System.out.println(list.get(i));
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>//迭代器遍历
<span style="white-space:pre">		</span>/*Iterator<String> it=list.iterator();
<span style="white-space:pre">		</span>while(it.hasNext()){
<span style="white-space:pre">			</span>System.out.println(it.next());
<span style="white-space:pre">		</span>}*/}


农夫带猫 动物 鱼过河案例演示:

package it.heima.list;

import java.util.ArrayList;
import java.util.List;

import javax.swing.tree.DefaultTreeCellEditor.EditorContainer;
import javax.xml.stream.events.EntityDeclaration;

/**
 * 农夫有狗 猫 鱼
 */
public class ListDemo {
	ArrayList<String> startList = new ArrayList<>();
	ArrayList<String> endList = new ArrayList<>();

	public ListDemo() {
		startList.add("fish");
		startList.add("cat");
		startList.add("dog");
	}

	public static void main(String[] args) {
		ListDemo demo=new ListDemo();
		demo.toTake();
	}

	public boolean isSafe(ArrayList<String> list) {
		boolean flag = true;
		if (list.contains("cat") && list.contains("fish") || list.contains("cat") && list.contains("dog")) {
			flag = false;
		}
		return flag;
	}

	public boolean isEmpty(ArrayList<String> list) {
		return list.isEmpty();
	}

	public void toTake() {
		String animal = startList.get(0);
		startList.remove(0);
		if (isSafe(startList)) {
			toThere(animal);
		} else {
			startList.add(animal);
			toTake();
		}
	}

	public void toThere(String animal) {
		endList.add(animal);
		System.out.println("农夫带着"+animal+"过河了");
		System.out.println("河这边还有"+startList);
		System.out.println("过河了的有"+endList);
		if(isEmpty(startList)){
			System.out.println("动物都过河了");
			return;
		}
		
		if(isSafe(endList)){
			
			toTake();
		}else{
		
			String s=endList.get(0);
			endList.remove(0);
			if(isSafe(endList)){
				System.out.println("农夫带着"+s+"回到了这边");
				startList.add(s);
				toTake();
			}else{
				toThere(s);
			}
		}		
	}
}
结果:




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值