合集:和数组一样,也是存储数据的容器。
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. 输出方式:for、Iterator。
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表。
保证元素唯一通过hashcode和equals方法。
对于HashSet来说,判断元素是否存在,或者删除元素,都是靠hashcode和equals。
对于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)+" ");
}
}
}
转载于:https://blog.51cto.com/7618153/1257616