合集:和数组一样,也是存储数据的容器。

1. 数组长度固定,集合长度可变。

2. 数组能存基本数据类型,也能存引用数据类型。集合只能存引用数据类型。

3. 数组只能存单一类型,集合能存任意引用类型。

List:存入顺序和取出顺序一致,存储的元素可以重复。有序、可以重复。

ArrayList:底层是Object数组。

1. 增加:add 及其重载   如:list.add("one");

2. 删除:remove(index)remove(Object)clear()

3. 修改:set(index ,Object)

4. 查找:contains():依据equals方法来判断是否包含该元素。indexOf

5. 输出:for循环:size()get(index).

6. ArrayList list = new ArrayList();

list.add(new String("one"));

list.add("one");

list.add(2);

list.add("three");

特殊注意的地方:

1. set返回的该位置上原先的元素。

2. remove(Object): 移除此列表中首次出现的指定元素(如果存在)。

泛型:

为了规范元素类型。避免强制类型转换。

Vector:ArrayList用法基本一致。StringBuiler/StringBuffer. ArrayList/Vector

1. 推出时间。

2. 线程安全:前者线程安全,后着非线程安全(不支持多线程)。

3. 后者效率高。

4. 输出方式:forIterator

Iterator:迭代器,用于取出集合中的元素。

Iterator<String> it = list.iterator();

while(it.hasNext()){

String s = it.next();

System.out.println(s);

}

java.util.ConcurrentModificationException:在迭代过程中,如果集合操作了元素,报此异常:

并发修改异常。

迭代器使用注意:

1. 要定义在循环的外面。

2. hasNext()方法不移地指针。next()方法移动指针。

3. 每一个迭代器只能迭代一次。

LinkedList:底层是双向链表。

ArrayList基本用法一样。

ArrayList:经常用于查询,对于LinkedList:经常用于频繁的增加。

Set:无序、元素唯一。

Set set = new Set();

set.add("E");

set.add("B");

set.add("D");

set.add("A");

set.add("C");

输出为:A  B  C   D   E

HashSet:底层hash表。

保证元素唯一通过hashcodeequals方法。

对于HashSet来说,判断元素是否存在,或者删除元素,都是靠hashcodeequals

对于ArrayList来说,判断元素是否存在,或者删除元素,都是靠equals

TreeSet:底层二叉树。

自动排序。依据的就是compareTo方法,要求存入其中的元素具有可比较性。

比较可以有两种方式:

1. implments Comparable接口,重写compareTo方法。

2. 更灵活的方式:让TreeSet本身具有可比较性:构造中传入一个Comparator的对象,重写compare方法。

例子:

输入文件名,要求:

1、用ArrayList记录所有的文件名,输入over代表输入结束

2、所有文件名输入完毕后,单独分出文本文件(.txt/.java)和图片文件(.jpg/.bmp)结尾

3、打印所有的文本文件和图片文件,要求格式:

文本文件:xxx.txt xxx.java……

图片文件:xxx.jpg xxx.bmp……

代码如下:

package lizi;

import java.util.ArrayList;

import java.util.Scanner;

public class TestFileNameSplit {

public static void main(String[] args) {

ArrayList<String> all = new ArrayList<String>();

Scanner scan = new Scanner(System.in);

// 文件名录入模块

for(;;){

System.out.println("请录入一个文件名:");

String strFileName = scan.next();

if("over".equals(strFileName)){

break;

}

all.add(strFileName);

}

//System.out.println(all);

// 将录入的所有文件名分拣

ArrayList<String> txtList = new ArrayList<String>();

ArrayList<String> imgList = new ArrayList<String>();

for(int i=0;i<all.size();i++){

String s = all.get(i);

if(s.endsWith(".txt") || s.endsWith(".java")){

txtList.add(s);

}else if(s.endsWith(".jpg") || s.endsWith(".png")){

imgList.add(s);

}

}

// 分类输出

System.out.print("文本文件:");

for(int i=0;i<txtList.size();i++){

System.out.print(txtList.get(i)+" ");

}

System.out.println();

System.out.print("图片文件:");

for(int i=0;i<imgList.size();i++){

System.out.print(imgList.get(i)+" ");

}

}

}