------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一,集合概念
之前我们存储大量的对象,可以使用数组:
但数组有两个缺陷:
1.其长度一旦确定,后期不能更改;对于元素的新增、删除就十分的不方便;
2.数组只能存储一种类型的数据。
为了解决上述问题,也为了我们程序员更加方便的存储大量的对象,Java为我们提供了一种"类":集合类;
1.集合:它的作用跟数组一样,就是存储大量对象的;
2.跟数组不同的:
1).使用集合可以是我们程序员不用关心"长度"的概念,"集合"对于我们来说,似乎像个"无底洞",可以存储无限数量的对象;
2).集合可以存储任何的"对象";(但后期我们也是经常会存储一种对象)
public class Demo {
public static void main(String[] args) {
//1.定义容器:集合类:ArrayList
ArrayList list = new ArrayList();
//2.实例化若干多的Student对象
for(int i = 0;i < 10000; i++){
//直接实例化,并向集合中添加对象(注意:这里添加的也是对象的引用)
list.add( new Student("姓名:" + i,i + 10));//姓名:0,10
}
//经过上述的第2步后,集合中添加了10000个Student对象的引用;
//3.遍历集合
for(int i = 0;i < list.size();i++){
//从集合中取出Student引用
Student s = (Student)list.get(i);//跟数组差不多,这里调用的是get()方法,获取一个Student的引用.由于get方法返回的是Object类型,所以这里强转一下
System.out.println(s.name + "," + s.age);
}
//假如,原集合存储的对象有增加,这时可以直接向集合中继续添加元素
for(int i = 10000;i < 20000; i++){
//直接实例化,并向集合中添加对象(注意:这里添加的也是对象的引用)
list.add( new Student("姓名:" + i,i + 10));//姓名:0,10
}
}
}
第二讲 Collection
一,Collection
1.它是所有List和Set集合的跟接口;
2.它内部定义了List和Set所应具有的方法;
学习:从Collection接口开始;
使用:从子类开始:ArrayList
Collection中定义的常用方法:
1.添加:
//大家以后看到某个方法的形参或返回值是E的话,那么就先把它视作:Object类型:
boolean add(Object e):向集合中添加元素;如果此 collection 由于调用而发生更改,则返回 true
boolean addAll(Collection c)
2.删除:
boolean remove(Object o):移除元素:此 collection 由于调用而发生更改),则返回 true 。
void clear():清空集合
boolean removeAll(Collection c)
3.判断:
boolean contains(Object o):判断参数在集合中是否存在;存在:返回true,否则返回false
boolean isEmpty():判断集合为空;
boolean containsAll(Collection c)
4.获取:
int size():获取集合内的元素的数量;
boolean retainAll(Collection c)
二,Collection中的一些批量操作 的方法:
添加
boolean addAll(Collection c):指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
删除
boolean removeAll(Collection c):移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
判断:
boolean containsAll(Collection c):如果此 collection 包含指定 collection 中的"所有元素",则返回 true。
boolean retainAll(Collection c):移除此 collection 中未包含在指定 collection 中的所有元素。
代码:
import java.util.ArrayList; import java.util.Collection; public class CollectionMethod { public static void main(String[] args) { methodSingle(); System.out.println("===================="); methodAll(); } public static void methodSingle(){ //使用子类ArrayList Collection list = new ArrayList(); //向集合中添加引用(这里添加字符串) list.add("刘若英"); list.add("刘德华"); list.add("刘诗诗"); list.add("刘惜君"); //打印集合: System.out.println("原集合:" + list); //测试:remove(Object o); System.out.println("移除刘若英:" + list.remove("刘若英"));//true System.out.println("移除后:" + list); //4.void clear():清空集合 /*list.clear(); System.out.println("集合被清空了:" + list);*/ //5.boolean contains(Object o):判断参数在集合中是否存在;存在:返回true,否则返回false System.out.println("判断刘若英是否存在:" + list.contains("刘若英")); System.out.println("判断刘德华是否存在:" + list.contains("刘德华")); //6.boolean isEmpty():判断集合为空; /*System.out.println("集合是否为空:" + list.isEmpty()); list.clear(); System.out.println("清空后,判断是否为空:" + list.isEmpty());*/ //7.int size():获取集合内的元素的数量; System.out.println("集合内元素的数量:" + list.size()); } public static void methodAll(){ //集合1 Collection list1 = new ArrayList(); list1.add("刘若英"); list1.add("刘德华"); list1.add("刘诗诗"); list1.add("刘惜君"); //集合2 Collection list2 = new ArrayList(); list2.add("王心凌"); list2.add("王力宏"); list2.add("王光良"); list2.add("王菲"); //addAll() list1.addAll(list2);//合班 System.out.println("合班之后list1中的元素:" + list1); System.out.println("list2中的元素:" + list2); //removeAll(); /* list1.removeAll(list2);//再分班 System.out.println("分班后,list1中的元素:" + list1); System.out.println("list2中的元素:" + list2); */ //containsAll System.out.println("list1中包含list2中的所有元素吗?" + list1.containsAll(list2)); Collection list3 = new ArrayList(); list3.add("毛爷爷"); list3.add("铁娘子"); list3.add("奥巴马"); list3.add("金正恩"); System.out.println("list1中包含list3中的所有元素吗?" + list1.containsAll(list3)); //retainAll() list2.retainAll(list3); System.out.println("移除list2中未包含在list3中的所有元素:" + list2); System.out.println("list2中的元素;" + list2); System.out.println("list3中的元素:" + list3); Collection list4 = new ArrayList(); list4.add("aa"); list4.add("bb"); Collection list5 = new ArrayList(); list5.add("cc"); list5.add("dd"); list4.retainAll(list5); System.out.println("list4 中的所有元素:" + list4); System.out.println("list5 中的所有元素:" + list5); } }
三,迭代器:java.util.Iterator(接口)
成员方法:
1.boolean hasNext():判断是否可以返回下一个元素;
2.Object next():返回下一个元素;
两种遍历方式:
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; /* * * * */ public class CollectionTraverse { public static void main(String[] args) { methodTraverseFirst(); System.out.println("==========="); methodTraverseSecond(); } /* * 方法一: * */ public static void methodTraverseFirst() { //实例化一个集合 Collection list = new ArrayList(); //填充集合 list.add("王心凌"); list.add("张韶涵"); list.add("辛晓琪"); list.add("蔡依林"); //获取数组 Object[] objArray = list.toArray(); //遍历数组 for(int i = 0;i < objArray.length ; i++){ //由于toArray()方法返回的是Object类型的数组,而我们存储的是String对象。可以将Object强制转换为String String s =(String) objArray[i]; System.out.println("数组:"+s); } } public static void methodTraverseSecond(){ //1.实例化一个集合 Collection list = new ArrayList(); //2.填充集合 list.add("王心凌"); list.add("张韶涵"); list.add("辛晓琪"); list.add("蔡依林"); //3.使用迭代器遍历: Iterator it = list.iterator(); while(it.hasNext()){ Object o = it.next(); System.out.println("Iterator:" + o); } } }
第三讲 List
一,层次
Collection(接口):
|--List(接口):
|--ArrayList(类)
二,List接口的特点:
1.有序的;
2.可以根据整数的索引访问元素(类似于数组的使用);
3.允许重复的元素;
三,List接口中的特有方法:
void add(int index,Object element):在index的位置上插入元素element,原索引上的元素依次后移;
Object remove(int index):移除列表中指定位置的元素(可选操作)。将所有的后续元素向左移动(将其索引减 1)。返回从列表中移除的元素。
Object get(int index):取index位置上的元素。(它就类似于数组的下标)
Object set(int index,E element):将element替换原index位置上的元素;
LitsIterator listIterator():List接口特有的Iterator(),同样是用来遍历元素的。
四,|--List接口:
|--ArrayList类:内部数组实现;线程不安全的。效率高
|--Vector类:内部数组实现;线程安全的。效率低;
|--LinkedList类:链表实现:线程不安全的。效率高;
五,Iterator接口:是单向的,只能向下遍历;
|--ListIterator接口:
|--特有的方法:
hasPrevious():如果可以向上遍历,返回true
previous():获取前一个元素;
import java.util.ArrayList; import java.util.List; public class ListMethod { public static void main(String[] args) { //实例化一个集合 List list = new ArrayList(); //先使用Collection的add添加一些元素 list.add("紫薇"); list.add("尔康"); list.add("五阿哥"); //1.void add(int index,Object element) //在ccc前面加一个XXX list.add(2,"小燕子"); System.out.println("add方法之后的集合:" + list); list.add(3,"漱芳斋");//OK的 System.out.println("add方法之后的集合:" + list); //2.Object remove(int index): list.remove(3); System.out.println("移除掉之后的元素:" + list); //3.Object get(int index) System.out.println("获取索引为3的元素:" + list.get(3)); //4.Object set(int index,E element) //将XXX改为YYY list.set(3, "皇阿玛"); System.out.println("替换后为:" + list); } }1