--------------------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培训、期待与您交流! --------------------