--------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------
1.集合。
1.概述
集合就是一个容器,是用来存储对象的,里面可以存储不同的对象,只要是对象,就可以存储,集合可以分为很多种,他们的底层的存储结构是不一样的(数据结构),所以不同的集合有不同的功能,根据情况选择不同集合。但是他们有共同的特点,就把特点抽取出来了,形成了接口Collection。
2.特点
集合可以存储不同的对象,只要是对象,就可以存储(一般情况下我们要存储一样的对象,否则读取的时候就不容易读取了),数组也是存存储对象的,但是数组只能存储相同的特点。
集合的长度是变化的,数组的度长是固定的。
3.集合框架
下面说一些常见的集合
2.Collection
1.介绍
Collection集合是把所有集合共同的特点抽取出来后,存储在Collection接口中。
2.Collection常用的方法
接口不能实例化,所以我们使用其一个常见子类来进行演示ArrayList.
增加:add(E e)使用了泛型,我们按时理解成Object,就是我们要执行我们在集合中存储的数据类型,否则会有安全隐患。.
判断:isEmpty() 判断是否为空
删除:remove(Object o) ,clear()
装换成数组:toArray()
获取:使用的是迭代器
求交集:removeAll(Collectioncon),从此集合中移con集合中的元素。retainAll(Collectioncon):在此集合中保留集合con中也包含的元素
package www.fuxi.jihe; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class jiheText { public static void main(String[] args) { Collection collection = new ArrayList(); /* 增加数据 */ collection.add("zhangsan"); collection.add("lisi"); collection.add("wangwu"); collection.add("zhaoliu"); /* 查看集合的长度 */ System.out.println("集合的大小:" + collection.size()); /* 查看集合是否为空 */ System.out.println("集合是否为空:" + collection.isEmpty()); /* 查看集合中的元素,我们使用的是迭代器 */ Iterator it = collection.iterator();// 获取迭代器 while (it.hasNext()) {// 判断集合的下一个元素是否为空 System.out.print(it.next() + ";");// 如果不为空,那么就读取出来 } /* 转换成数组 */ Object[] obs = collection.toArray(); System.out.print("\n转换成数组后,数组的元素:"); for (Object ob : obs) { System.out.print(ob + ","); } /* 判断集合中是否包含某元素 */ System.out.println("\n集合中是否包含lisi:" + collection.contains("lisi")); System.out.println("\n原集合:" + collection); Collection collection1 = new ArrayList(); collection1.add("lisi"); collection1.add("zhaoliu"); collection1.add("wanggang"); collection1.add("xuemei"); collection.removeAll(collection1);// 移除与集合collection1中元素相同的元素 System.out.println("移除了与Collection1集合中相同的元素:" + collection); /* 清空集合 */ collection.clear(); System.out.println("清空集合:" + collection); } } 结果: 集合的大小:4 集合是否为空:false zhangsan;lisi;wangwu;zhaoliu; 转换成数组后,数组的元素:zhangsan,lisi,wangwu,zhaoliu, 集合中是否包含lisi:true 原集合:[zhangsan, lisi, wangwu, zhaoliu] 移除了与Collection1集合中相同的元素:[zhangsan, wangwu] 清空集合:[]
3.迭代器
迭代器是用来获取集合中元素,其实迭代器是集合的内部类,因为捏不累读取本类的数据最方便,但是不同的集合他们的存储的结构不同,并且每个集合都要读取数据,所以就把他们共同的方法抽取出来,然后利用本类来返回他们自己的迭代器,这样既方便又安全。
hasNext(),判断元素是否可以迭代next()方法然后迭代的下一个元素remove()从集合中移除此元素
package www.fuxi.jihe; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class jiheText { public static void main(String[] args) { Collection collection = new ArrayList(); /* 增加数据 */ collection.add("zhangsan"); collection.add("lisi"); collection.add("wangwu"); collection.add("zhaoliu"); Iterator it = collection.iterator();// 获取迭代器 while (it.hasNext()) {// 判断集合的下一个元素是否为空 Object ob = it.next(); System.out.print(ob + ";");// 如果不为空,那么就读取出来 if (ob.equals("lisi")) { it.remove();// 移除lisi元素 } } System.out.println("\n集合:" + collection); } } 结果: zhangsan;lisi;wangwu;zhaoliu; 集合:[zhangsan, wangwu,zhaoliu]
3.List集合
1.概述
list是Collection的子接口,他有自己的独特的方法,他可以使用索引来操作集合中的数据,提供了自己迭代器。元素是有序的,里面的元素可以重复
2.特有的方法
Add(index,element) addAll(index,Collection)
Remove(index) 通过索引删除元素
subList(from,to),去集合中的一部分元素
listIterator(),这个比Iterator()中多了很多方法,里面可以增加元素。增删,该查,反向读取都可以
public class ListDemo { public static void main(String[] args) { List list = new ArrayList(); list.add("java01"); list.add("java02"); list.add("java03"); System.out.println("集合:" + list); /* 在第二位置添加元素 */ list.add(1, "java00"); System.out.println("集合:" + list); /* 利用自己的迭代器读取和插入数据,在java03后面添加元素 */ ListIterator it = list.listIterator(0); while (it.hasNext()) { if (it.next().equals("java03")) { it.add("javaLast"); } } System.out.println("集合:" + list); /*取List集合中1~3的元素,包含头不包含尾*/ List list1=list.subList(1, 3); System.out.println("集合List1=:" + list1); } } 结果: 集合:[java01, java02, java03] 集合:[java01, java00, java02, java03] 集合:[java01, java00, java02, java03, javaLast] 集合List1=:[java00, java02]
4.List的子类
List
|-ArrayList:底层结构是数组,优点:当数据比较多的话,查询数据效率高,缺点:增加和删除效率低,原因移动的数据比较麻烦,说是可变的数组,原因是:默认长度是10,当超多此长度后,会以新建一个数组,长度增加50%,然后把原来的数组付给新的数组,然后再增加新的元素。
|-LinkedList :底层是数据结构是链表,各个元素都是使用指针链接起来 的,有点:增加和删除效率高,缺点:查询效率低
|-Vector:底层也是数组结构,但是是1.0版本以前的长度是100%的速度增长,ArrayList是1.2版本以后的,替换的此类,Vector集合线程同步,ArrayList线程不同步。
Vector有三种读取方式:Iterator(),get(),还有自己特有的杜甫方式,枚举读取
下面介绍枚举读取:
package www.fuxi.jihe; import java.util.Enumeration; import java.util.Vector; public class VectorDemo { public static void main(String[] args) { Vector v = new Vector(); v.add("zhnagsan");// 添加 v.addElement("lisi");// 添加 v.add("wangwu"); Enumeration em = v.elements();// 枚举读取器 while (em.hasMoreElements()) { System.out.print(em.nextElement() + ","); } } } 结果: zhnagsan,lisi,wangwu,
5.LinkedList
特有方法
addFirst();addLast();
getFirst();getLast(); 获取元素但是不删除元素
removeFirst();removeLast();获取元素但是删除元素,如果不存在此元素,那么据会抛出异常
1.6版本后的新方法
pollFirst();pollLast();获取并移除第一个元素或者最后一个元素,如果不存在,返回为null,不抛出异常。
offerFirst();offerlast();
peekFirst();peekLast();
package www.fuxi.jihe; import java.util.LinkedList; public class LinkedListDemo { public static void main(String[] args) { LinkedList list = new LinkedList(); list.add("forward01"); list.addFirst("forward00"); list.addLast("forwardLast"); System.out.println("集合:" + list); // list.get(3);// 此会报异常,原因是集合中没有此元素 System.out.println("集合中的第一个元素:" + list.remove(0));// 移除并且能获得,但是如果没有此元素的话,那么就会报异常 System.out.println("移除第一个元素后的集合:" + list); System.out.println("获取第一个元素:" +list.peekFirst());// 获取第一个元素,但是不移除,如果不存在,则是null System.out.println("获取第一个元素:" +list.peekLast());// 获取最后一个元素,但是不移除,如果不存在,则是null } } 集合:[forward00, forward01, forwardLast] 集合中的第一个元素:forward00 移除第一个元素后的集合:[forward01, forwardLast] 获取第一个元素:forward01 获取第一个元素:forwardLast
--------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------