黑马程序员——集合之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);}}}}结果:
- 黑马程序员——集合之List
- 黑马程序员——JAVA基础之List集合
- 黑马程序员——java基础之List集合
- 黑马程序员——集合框架-List
- 黑马程序员——集合框架&List
- 黑马程序员——集合框架&List
- 黑马程序员——List集合
- 黑马程序员——集合框架2:List集合
- 黑马程序员_集合之List
- 黑马程序员 java基础之list集合
- 黑马程序员_Collection集合之List
- 黑马程序员,集合List
- 黑马程序员-List集合
- 黑马程序员-------集合List
- 黑马程序员--List集合
- 黑马程序员-List集合
- 黑马程序员---- list 集合
- 黑马程序员————java基础---------集合之Collection与List
- putty连接linux服务器中文无法正确显示问题的解决
- tortoisesvn: file:///
- 自动加载
- vs2013 ef,使用 MySQL来做数据库开发
- IOS 代码中修改运营商、电池颜色
- 黑马程序员——集合之List
- poj 3974 Palindrome 裸的最长回文子串Mancher算法O(n)
- MySQL日期时间函数大全
- MiniSearch
- <xliff:g>标签介绍
- 大型网站的灵魂——性能
- Python2.7的UnicodeEncodeError: ‘ascii’ codec can’t encode 错误
- Codeforces587C(倍增LCA)
- 读取plist文件中的Boolean类型的字段值