collection(容器)上课笔记
collection
set (无序,唯一) list (有序,可重复的) map
HashSet ArrayList LinkedList HashMap
为什么要有容器?
数组的长度一旦指定,程序执行的过程中不能改变、
String[] names = new String[100]();
正是因为数组有这样的缺陷 才出现了容器,容器的大小可以任意改变,容器的大小是你放了多少数据它就是多大
使用容器的时候要导包:java.util.*
例子:Set set = new HashSet();
set.add("hello");
set.add(100);
set.remove(100);
System.out.println(set);
list 借口中其实就是多出来一些根据索引进行操作的方法:如在指定的索引位置上添加数据,在指定位置上删除数据,替换指定索引位置上添加数据,在指定位置上删除数据,替换指定索引位置上的元素。判断一个元素在容器中出现索引位置
例子:List list = new ArrayList();
list.add(100);
list.add("hello");
list.add(2."world");
list.remove(1);//list.remove("hello");不会自动装箱删除第一次出现的
list.remove(new Integer(100));// 删除整数位置
ArrayList 查找速度比较快而插入很慢 内存地址连续 (容器数据经常用于查找)
LinkedList 查找速度慢,插入较快(更新) 内存地址不连续 (容器数据经常用于更新)
容器的迭代
iterator(容器的迭代去)接口
所有实现了collection 接口的类都有一个iterator()方法,这个方法会得到一个实现了的iteration接口的类的对象
for(Iterator i = list.iteration();hasNext();){
object o = i.next();
System.out.println(o);
}
List虽然有索引,也必须用迭代器,因为这是唯一线程安全的方法。
collection类
提供了一系列的方法来对List进行操作
collection.sort(list);排序从小到大,静态的
自己写的类 和他相关的一切规则要自己来指定
增强for循环,JAVA,5.0 之后
int[] nums{1.2.3.4}
for(int n:nums){
system.out.println(n);
}
(不能方便操作引索,只能用于简单的遍历)
如果增强for循环迭代的是容器的话内部默认使用iteator
泛型。java5.0之后出现的指定当前容器只能放什么类型,并且不能有List<penson> list = new ArrayList<penson>();
父类类型指向子类对象
例子:文件夹递归
import java.io*;
import java.util.*;
public class Test{
public static void main(String args[]){
show(new File("d:/aaa"),0);
}
public static void show(File file){
StringBuffer s = new StringBuffer("");
for(int i = 0; i<level;i++){
s.append(" ");
}
File[] files = file.listFiles();
for(int i=0;i<=files.length;i++){
System.out.println(s + files[i].getName());
if(files[i].isDirectory()){
show(files(i),level+1);
}
}
}
}