因数组一旦创建长度就不能改变
集合(collection),将多个相同性质的元素汇聚成一个整体 所在java.util包
集合框架(collection framework)
一、List是一个有序的、可重复的子接口,ArrayList是实现list的一个子类
在集合当中只能存放引用数据类型,不能存放基本数据类型
ArrayList list=new ArrayList();
list.add(对象);
list.add(位置,对象);
list.get(2);//获取指定位置的元素,返回的数据类型是对象
list.contains(元素) //是否包含这个元素
list.size() //元素的个数
list.remove(位置) //移除元素,返回值是相对应位置的元素
二、泛型 JDK1.5之后的东西,主要是用来约束集合中元素的数据类型
ArrayList<String> list=new ArrayList<String>();
增加for循环,JDK1.5之后的东西
for(String s:list){
System.out.println(s);
}
通过迭代器,while(it.hasnext()){ it.next();}
通过对象流写对象的过程:
因直接将对象写入流,追加读取会报错,所以必须借助ArrayList集合
1、判断文件中是否存在该对象集合,如果不存在则new()一个,如果存在则追加
2、创建list对象存储student对象元素
3、将list对象写入到data文件中
/**
*通过对象流把list读取和写入到data文件中
*2015-6-16
*作者 常宝
*/
public class testsaveobj {
public static void main(String[] args) {
Student s=new Student();
s.setAge("20");
s.setName("ddd");
s.setSex(2);
testsaveobj t1=new testsaveobj();
boolean b= t1.objwrite(s);
System.out.println(b);
ArrayList<Student> alist=t1.objread();
System.out.println(alist.size());
}
//将存储student元素的list对象写入到data文件中
public boolean objwrite(Student s){
File f=new File("d:\\data.txt");
ArrayList<Student> list;
if(f.length()==0){
list=new ArrayList<Student>();
list.add(s);
}
else{
list=this.objread();
list.add(s);
}
ObjectOutputStream objOut=null;
try {
objOut=new ObjectOutputStream(new FileOutputStream(f));
objOut.writeObject(list);
return true;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
objOut.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return false;
}
//读取data文件里的list对象的student元素
public ArrayList<Student> objread(){
File f=new File("d:\\data.txt");
ObjectInputStream objin=null;
if(f.length()==0){
System.out.println("文件无内容");
}
else{
try {
objin=new ObjectInputStream(new FileInputStream(f));
ArrayList<Student> list=(ArrayList<Student>)objin.readObject();
return list;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
objin.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return new ArrayList<Student>();
}
}
三、HashSet 是无序的、无重复子类
因为没有位置,不能通过get获取指定元素值,只能进行增加,删除等操作
判断元素是否有重复值是调用hashcode进行比较是否重复值
只能通过迭代器进行遍历
四、HashMap<key,value> 通过key查找对应的value
没有迭代器
HashMap<String,String> map=new HashMap<String,String>();
map.put("1","2"); 返回的数据类型是旧值
containskey 判断是否包含指定的键
map.keyset(); 返回set数据类型的集合
containsvalue 判断是否包含值
map.get(key); 根据键返回对应的值
map.remove(key);根据键移除对应的值
map.entrySet() ;返回 set<map<k,v>>
获取所有键,循环遍历所有键,根据键获取相应的值
一、Collections集合工具类
1、升序排列:Collectons.sort(list);
2、二分查找binarySearch:将一组数据排序并输出指定数据的位置 Collectons.binarySearch(list,value);
注意:自定义对象比较需要实现comparable比较接口,可进行重写升序或降序排列,eg : return o.filed-b.filed
二、Arrays 数组工具类
1、排序sort
2、二分查找binarySearch
3、复制copyof int [] arr1=Arrays.copyof(arr,新数组的长度);
4、范围复制copyofrange