黑马程序员——集合之List

来源:互联网 发布:ipad怎么传软件 编辑:程序博客网 时间:2024/05/20 18:51

------- 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
原创粉丝点击