黑马程序员---集合-Collection,List
2015-06-09 19:11
591 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
一、引出
存储大量的数据的时候,我们可以用数组,但是数组有两个缺点:
第一就是:其长度一旦确定,后期不能更改;对于元素的新增、删除就十分的不方便;第二就是:数组只能存储一种类型的数据。
为了解决上述问题,也为了我们程序员更加方便的存储大量的对象,Java为我们提供了一种”类”:集合类;
1.集合:它的作用跟数组一样,就是存储大量对象的;
2.跟数组不同的:
1).使用集合可以是我们程序员不用关心”长度”的概念,”集合”对于我们来说,似乎像个”无底洞”,可以存储无限数量的对象;
2).集合可以存储任何的”对象”;(但后期我们也是经常会存储一种对象)
二、分类
Cellection是所有List和Set集合的根接口;它内部定义了List和Set所应具有的方法;下面看图认清Cellection系列。
三、Collection基本方法
※添加功能:
boolean add(Object e):向集合中添加元素;如果此 collection 由于调用而发生更改,则返回 true
boolean addAll(Collection c)
※删除功能:
boolean remove(Object o):移除元素:此 collection 由于调用而发生更改),则返回 true 。
void clear():清空集合
boolean removeAll(Collection c)移除此 collection 中那些也包含在指定 collection 中的所有元素
※判断功能:
boolean contains(Object o):判断参数在集合中是否存在;存在:返回true,否则返回false
boolean isEmpty():判断集合为空;
boolean containsAll(Collection c):判断集合中是否包含指定的全部元素
※获取功能:
int size():获取集合内的元素的数量;
boolean retainAll(Collection c):两个结合都有的元素,就是求交集功能
程序例子
程序执行的结果是:
三、Collection集合的遍历
这里有两种方法,一种是将集合转为数组,然后遍历数组,另一种是使用迭代器
程序运行的结果是:
四、List集合特有的功能
作为Collection的子类接口, 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集合的迭代器的功能,可以向上遍历,也可以向下遍历。这个要比Collection中的迭代器强大
程序运行的结果为:
五、Vector类和LinkedList类特有方法
(1)Vector类
Vector类的内部是数组实现,线程是安全的,效率不高,他是List的子类,所以,它具有List和Collection的所有功能,但Vector又增加了一些特有的功能:
public void addElement(Object obj):向集合添加一个obj,添加到集合的末尾;
public Object elementAt(int index):获取index位置上的元素;作用等同于:List–>get(int index);
下面用程序来实现这些方法:
(2)LinkedList类
LinkedList的特有方法:
public void addFirst(E e)及addLast(E e)
public E getFirst()及getLast()
public E removeFirst()及public E removeLast
下面程序试一试这些方法:
这段程序运行的结果是:
一、引出
存储大量的数据的时候,我们可以用数组,但是数组有两个缺点:
第一就是:其长度一旦确定,后期不能更改;对于元素的新增、删除就十分的不方便;第二就是:数组只能存储一种类型的数据。
为了解决上述问题,也为了我们程序员更加方便的存储大量的对象,Java为我们提供了一种”类”:集合类;
1.集合:它的作用跟数组一样,就是存储大量对象的;
2.跟数组不同的:
1).使用集合可以是我们程序员不用关心”长度”的概念,”集合”对于我们来说,似乎像个”无底洞”,可以存储无限数量的对象;
2).集合可以存储任何的”对象”;(但后期我们也是经常会存储一种对象)
二、分类
Cellection是所有List和Set集合的根接口;它内部定义了List和Set所应具有的方法;下面看图认清Cellection系列。
三、Collection基本方法
※添加功能:
boolean add(Object e):向集合中添加元素;如果此 collection 由于调用而发生更改,则返回 true
boolean addAll(Collection c)
※删除功能:
boolean remove(Object o):移除元素:此 collection 由于调用而发生更改),则返回 true 。
void clear():清空集合
boolean removeAll(Collection c)移除此 collection 中那些也包含在指定 collection 中的所有元素
※判断功能:
boolean contains(Object o):判断参数在集合中是否存在;存在:返回true,否则返回false
boolean isEmpty():判断集合为空;
boolean containsAll(Collection c):判断集合中是否包含指定的全部元素
※获取功能:
int size():获取集合内的元素的数量;
boolean retainAll(Collection c):两个结合都有的元素,就是求交集功能
程序例子
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); } }
程序执行的结果是:
三、Collection集合的遍历
这里有两种方法,一种是将集合转为数组,然后遍历数组,另一种是使用迭代器
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接口拥有自己的一些特点:
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(),同样是用来遍历元素的。
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); } }
程序运行的结果是:
另外List集合的迭代器的功能,可以向上遍历,也可以向下遍历。这个要比Collection中的迭代器强大
import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class ListTraverse { public static void main(String[] args) { List list = new ArrayList(); list.add("紫薇"); list.add("尔康"); list.add("五阿哥"); list.add("小燕子"); //向上遍历 ListIterator listIt = list.listIterator(); System.out.println("***注意:使用previous()之前一定要先向下遍历*****"); while(listIt.hasNext()){ System.out.println(listIt.next()); } System.out.println("*******向上遍历*********"); while(listIt.hasPrevious()){ System.out.println(listIt.previous()); } } }
程序运行的结果为:
五、Vector类和LinkedList类特有方法
(1)Vector类
Vector类的内部是数组实现,线程是安全的,效率不高,他是List的子类,所以,它具有List和Collection的所有功能,但Vector又增加了一些特有的功能:
public void addElement(Object obj):向集合添加一个obj,添加到集合的末尾;
public Object elementAt(int index):获取index位置上的元素;作用等同于:List–>get(int index);
下面用程序来实现这些方法:
public class VectorDemo { public static void main(String[] args) { //1.定义一个Vector Vector list = new Vector(); //2.填充集合 list.addElement("张三丰"); list.addElement("张无忌"); list.addElement("张艺谋"); list.addElement("张卫健"); //3.遍历for for(int i = 0;i < list.size() ; i++){ String s = (String)list.elementAt(i); System.out.println(s); } } }
(2)LinkedList类
LinkedList的特有方法:
public void addFirst(E e)及addLast(E e)
public E getFirst()及getLast()
public E removeFirst()及public E removeLast
下面程序试一试这些方法:
import java.util.LinkedList; public class LinkedListDemo { public static void main(String[] args) { //1.实例化一个LinkedList LinkedList list = new LinkedList(); //2.填充集合 list.addFirst("章子怡"); list.addFirst("张学友"); list.addFirst("小明");//添加到第一个元素的位置; //目前应该是"小明"在最前面。如果正常取出的话,先取出的:应该是"小明":相当于"栈结构" //get(int index); Object o = list.get(0); System.out.println(o); //测试getFirst()和getLast(); Object first = list.getFirst(); Object last = list.getLast(); System.out.println("first = " + first);//小明 System.out.println("last = " + last);//章子怡 //removeFirst() System.out.println(list.getFirst());//只是单纯的获取第一个元素,其它不做任何操作;//小明 System.out.println(list.getFirst());//同上面获取的是一样//小明 System.out.println(list.getFirst());//同上面获取的是一样//小明 System.out.println(list.getFirst());//小明 list.removeFirst();//移除掉第一个元素 System.out.println(list.getFirst());//张学友 list.removeFirst();//移除掉第一个元素 System.out.println(list.getFirst());//章子怡 list.removeFirst();//移除掉第一个元素 } }
这段程序运行的结果是:
相关文章推荐
- 黑马程序员——Foundation框架——包装类以及NSDate
- 推荐!国外程序员整理的Java资源大全
- 请不要说自己是 Java 程序员
- Google面试题-高楼扔鸡蛋问题
- 黑马程序员——Java基础---反射
- 黑马程序员——java基础(函数与数组)
- 悯码农 * 慧哥
- 请不要说自己是 Java 程序员
- 黑马程序员--代码块学习
- 黑马程序员+Java基础环境的搭建
- 黑马程序员——Foundation框架——NSArray和NSMutableArray
- 黑马程序员——Java基础---多线程
- 上海艾瑞公司面试心得
- 【剑指offer】 面试题10: 二进制中1的个数
- 115个Java面试题和答案——终极列表
- 2015.6.9日 电话面试(亚信科技)
- 程序员的量化交易之路(31)--cointrader之Balance现金(18)
- 【剑指offer】 面试题8: 旋转数组的最小数字
- 黑马程序员__java基础__反射(数组、框架)
- 黑马程序员---IOS基础---指针函数与函数指针