您的位置:首页 > 职场人生

黑马程序员---集合-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):两个结合都有的元素,就是求交集功能

程序例子

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();//移除掉第一个元素

}
}


这段程序运行的结果是:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: