---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
1. 为什么出现集合类?
java是一种面向对象的语言,它对事物的体现都是以对象的形式,所以为了方便对多个对象进行操作,需要对对象进行存储,而集合就是存储对象最常用的一种方式。集合类存放于java.util包中。
2. 集合与数组的区别:
数组:a) 数组的长度是固定的,数组一旦被创建,其长度就不可改变;b) 数组既可以存储对象,还可以存储基本数据类型;c) 数组中的元素类型在数组创建时就已确定,且一个数组中只能存放同一种类型的元素;
集合:a) 集合的长度是可变的;b) 集合中只可以存储对象,不可以存储基本数据类型;c) 同一个集合中可以存储不同类型的元素;
注意:集合中存放的是对象的引用,而非对象本身;
3. java集合框架:
Java的集合类主要由两个接口派生而出:Collection和Map.
Collection接口派生出了两个重要的子接口:List、Set;
4. 实现List接口的三个重要集合类:ArrayList、LinkedList、Vector
a) ArrayList:底层数据结构使用的是数组结构;查询速度快,增删慢;线程不同步,与Vector相比,效率较高;
b) LinkedList:底层数据结构使用的是链表数据结构;增删速度快,查询慢;线程不同步;
c) Vector:底层数据结构使用的是数组数据结构;线程同步,效率低;
5. ArrayList、LinkedList类中常用的方法:
添加元素:
ArrayList:add(E e): 返回值类型为boolean;
add(index, E e): 返回值类型为void;在指定角标位置添加元素,角标之后的元素依次后移;
addAll(Collection c): 返回值类型为boolean;在集合末尾添加传入的集合;
addAll(index,Collection c): 返回值类型为boolean;在指定角标位置添加传入的集合;
LinkedList:拥有ArrayList的所有添加元素的方法,其特有的添加方法有:
addFirst(E e): 返回值类型为void;添加元素至列表开头;
addLast(E e): 返回值类型为void;添加元素至列表末尾;
offer(E e): 返回值类型为boolean;添加元素至列表开头;
offerFirst(E e): 返回值类型为boolean;添加元素至列表开头;
offerLast(E e): 返回值类型为boolean;添加元素至列表末尾;
获取元素:ArrayList:get(index): 返回值指定角标位置的元素;
indexOf(obj): 返回指定元素在列表中首次出现的位置;若列表中无此元素则返回-1;
lastIndexOf(obj): 返回指定元素在列表中最后一次出现的位置;若列表中无此元素则返回-1;
LinkedList:拥有ArrayList的所有获取元素的方法,其特有的获取方法有:
getFirst(): 返回列表中第一个元素;
getLast(): 返回列表中最后一个元素;
peekFirst(): 获取列表的第一个元素,若列表为空则返回null;
peekLast(): 获取列表的最后一个元素,若列表为空则返回null;
删除元素:ArrayList:remove(index): 删除指定位置的元素,并返回该元素;
remove(obj): 返回值类型为boolean;移除列表中首次出现的该元素;
removeRange(fromIndex,toIndex): 返回值类型为void;移除指定角标范围的元素,包括头,不包括尾;
LinkedList:除了removeRange(fromIndex, toIndex),拥有ArrayList的其它所有获取元素的方法,其特有的获取方法有:
removeFirst(): 移除并返回列表中第一个元素;
removeLast(): 移除并返回列表中最后一个元素;
removeFirstOccurrence(obj):返回值类型为boolean;移除列表中第一次出现指定元素;
removeLastOccurrence(obj):返回值类型为boolean;移除列表中最后一次出现指定元素;
pollFirst(): 获取并移除列表的第一个元素,若列表为空则返回null;
pollLast(): 获取并移除列表的最后一个元素,若列表为空则返回null;
修改元素:ArrayList:set(index, E e): 把列表中指定位置的元素设置为e,并返回被替换的元素;
LinkedList:set(index, E e): 把列表中指定位置的元素设置为e,并返回被替换的元素;
操作元素的其它方法:ArrayList 和 LinkedList 通用的其它方法有:
contains(obj): 返回值类型为boolean,判断列表中是否含有指定元素;
isEmpty(): 返回值类型为boolean,判断列表是否为空;
size(): 返回列表中的元素个数;
6. 迭代器法遍历ArrayList和LinkedList集合,并操作集合中的元素:
a) 以ArrayList集合为例,采用Iterator迭代器遍历集合,把集合中内容为“hello”的字符串对象删除,代码如下:
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo {
publicstatic void main(String[] args){
ArrayList<String>al=new ArrayList<String>();
al.add("xingming");
al.add("xingbie");
al.add("hello");
al.add("jiguan");
al.add("hello");
System.out.println(al);
Stringstr=null;
for(Iterator<String> it =al.iterator();it.hasNext();){
str=it.next();
if(str.equals("hello"))
it.remove();
}
System.out.println(al);
}
}
Iterator 迭代器的特点:Iterator迭代器中只有三个方法:hasNext(); next(); remove();即Iterator对列表中的元素只有删除的功能,作用非常有限。
b) ListIterator迭代器中对集合中元素的操作方法丰富,可进行增,删,改,还可对集合进行倒序遍历;
下面以ArrayList集合为例,在遍历集合时对集合中的元素进行全部替换,并倒序遍历进行打印,代码如下:
import java.util.ArrayList;
import java.util.ListIterator;
public class ArrayListDemo2 {
publicstatic void main(String[] args){
ArrayList<String>al=new ArrayList<String>();
al.add("xingming");
al.add("xingbie");
al.add("jiguan");
System.out.println(al);
intcount=0;
ListIterator<String>it =al.listIterator();
for(;it.hasNext();){
it.next();
it.set((count++)+"");
}
for(;it.hasPrevious();)
System.out.print(it.previous()+'\t');
}
}
7. 集合工具类——Collections:
Collections是集合类的一个工具类(帮助类),其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。
1) 排序(Sort):
使用sort方法可以根据元素的自然顺序对指定列表按升序进行排序。前提是列表中的所有元素都必须实现 Comparable接口。
或者定义一个比较器,然后把该比较器对象传入sort方法中,就可以把此列表内元素按照指定的比较器进行比较。
通过该方法,List集合可以实现与TreeSet集合相似的比较功能,不过有一个重要区别就是:List集合中允许同一个对象在集合中的多个位置存在,而TreeSet集合中要求同一个对象只能存入一次。
2) 随机排序(Shuffle)
该方法可使用默认或指定的随机源对集合中的元素进行随机排序,这样的排列具有相同的可能性(假设随机源是公正的)。若把集合中的元素看成扑克牌,则该方法实现的功能就是洗牌。
3) 反转(Reverse)
该方法可以反转指定列表中元素的顺序。以ArrayList为例,代码示例如下:
importjava.util.*;
public class Collection_Reverse {
publicstatic void main(String[] args){
ArrayList<String>al=new ArrayList<String>();
al.add("zhangsan");
al.add("lisi");
al.add("wangwu");
System.out.println(al);
Collections.reverse(al);//反转集合中的元素;
System.out.println(al);
}
}
4) 交换(swap):
swap(List<?> list, int i, int j),该方法可以交换集合中两个指定角标位置上的元素。
5) 拷贝(Copy) :
用两个参数,一个目标 List和一个源 List,将源的元素拷贝到目标,并覆盖它的内容。目标 List至少与源一样长。如果它更长,则在目标 List中的剩余元素不受影响。用法: Collections.copy(list1,list2):后面一个参数是目标列表 ,前一个是源列表
6) 返回集合中最小元素(min)和最大元素(max) :
这两个方法可根据元素的自然顺序,返回给定集合中的最小元素和最大元素。若给定比较器,并把比较器传入这两个方法,则可根据指定比较器产生的顺序,返回给定集合的最小元素和最大元素。具体用法如下:
按默认顺序返回:Collections.max(List list);Collections.min(List list);
按比较器顺序返回:Collections.max(Listlist,comparator);Collections.min(Listlist,comparator);
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
详细请查看:<a href="http://edu.csdn.net" target="blank">http://edu.csdn.net</a>