一.概念:是为了实现某一目的或功能而预先提供的一系列封装好了的具有继承或实现的类与接口。
二.特点:
1.元素的类型可以不同 2.集合长度可变 3.空间不固定
三.collection与collections的比较
1.collection是封装东西的核心接口,
2.collections是操作集合的一个算法类。
四.collection接口下包括有(list、set、map)三种集合:
1.list集合(包含Arraylist、linkedlist、vector)——————>列表
①特点:线性,即是有序;元素放入的顺序和元素存储的顺序保持一致,表象上list最大的特点就是有下标。
②:Arraylist与linkedlist的选用及Arraylist与vector的区别
②-①:Arraylist与linkedlist的选用
Arraylist:就是作为一个数组的封装出现的底层就是一个数组(在需要多次遍历且需要做大量查询时的时候使用)。
linkedlist:底层封装的是一个双向链表(当需要做大量的增、删特别是中间的增删时使用)。
②-②:Arraylist与vector的区别
vector:在考虑线程安全时用它,用法和Arraylist一样。
③:使用Arraylist从增、删、改、查语法的使用:
Arraylist lst = new Arraylist();
增:lst.add("hello"); lst.add(new Date());//可以放任何类型的数据
改:lst.set(0,"world");//修改里面的数据时,需要给定下标和修改的数值
删:lst.remove(0);//直接给定我们想要删除值的对应下标即可
查:Date now = (Date)lst.get(0);//由上面的增、改、删顺序下来,我们上面删除了下标为零的数据,则 lst.add(new Date());从下标1变成下标为0的数值
④:linkedlist的用法和Arraylist的增、删、改、查是一样的,只需要把上面的代码中的Arraylist换成linkedlist即可。
⑤:泛型——用来控制集合只能操作某一种数据类型时使用:
例:
linkedlist <String> lst = new linkedlist <String>();//此时lst里就只能放String类型的数据了
⑥:遍历——将集合的每一个元素依次取出,做同样的操作:
⑥-1.使用普通for循环进行遍历
for(int i = 0; i < lst.size(); i ++){
System.out.println(lst.get(i).getDate());//接③中的Date
}
⑥-2.使用迭代器——Iterator完成遍历(只能 list、set集合使用)
例:
Iterator it = lst.interato();返回的是Object;//接③中的Date
while (it.hasNext() ){
Date d = it.next();
System.out.println(d.getDate());
}
特点:没有下标,从头到尾走一遍
⑥-3.for—each循环——底层封装的就是迭代器但是语法更简单,还可以操作数组
例:
for(Date d: lst){
System.out.println(d.getDate());//接③中的Date
}
2.set(包括Hashset、Treeset)——集
①特点:不能放置重复的元素,没有顺序;表象上set没有下标。
②:常用子类Hashset(如何判断两个元素是否重复呢?)
②-1:调用equals方法得到两个对象比较为true。
②-2:两个元素的hashcode值保持一致
注:只有这两个条件同时满足时,Java才认为这是同一对像,所有重写equals方法,一般也要重写hashcode方法,让equals返回true的对象,hashcode也能返回同样的整数值。
③:Hashset从增、删、改、查语法的使用:
增:增加放置元素的方法与Arraylist的方法相同
改:没有修改方法
删:只能根据对象进行删除,还是用的equals和hashcode来判断到底删除哪一个对象。
查:无法获取某一个指定的元素
④:遍历——将集合中的每一个元素一次取出,做同样的操作
④-1:不支持普通for循环,因为没有下标
④-2:支持迭代器
④-3:支持for—each循环
注:遍历方法和Arraylist相同。
3.Map(hashmap、properis)——映射
①特点:键值对,键要求唯一,值可以重复。(放入元素的顺序和存储顺序无关)
②常用子类:HashMap(主要用于集合操作);Properis(专用于操作属性文件)
③:HashMap的使用
import com.lovo.bean.StudentBean; public class TestMap { public static void main(String[] args) { HashMap<String, StudentBean> map = new HashMap<String, StudentBean>(); //增加元素 map.put("j34001", new StudentBean("zhang3",18,80)); map.put("j34002", new StudentBean("li4",28,85)); map.put("j34003", new StudentBean("wang5",18,87)); //得到长度 System.out.println(map.size()); //修改元素 map.put("j34003", new StudentBean("zhao6",24,75)); //删除元素---通过键去移除元素 map.remove("j34003"); //获取指定的元素对象 StudentBean stu = map.get("j34003"); //遍历Map //不能同时遍历键和值;只能分开遍历 //遍历所有的键 Set<String> keySet = map.keySet();//得到所有的键,装入一个Set集合中,返回给调用者 for(String key : keySet){ System.out.println(key); } //遍历所有的值 Collection<StudentBean> allStus = map.values();//得到所有的值,思考为什么不返回List或其它集合类型? for(StudentBean tmpStu : allStus){ System.out.println(tmpStu.getName()); } } }
④:Properis的使用
package com.lovo.props; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Properties; import java.util.Set; public class TestProperties { public static void main(String[] args) { Properties props = new Properties();//首先产生Properties集合容器 props.setProperty("J134001", "chenGuo");//调用setProperty方法放入元素,每个元素都是一对键值对 props.setProperty("J134002", "李四");//第一个参数是键,要求不能重复 props.setProperty("J134003", "张三");//第二个参数是值 props.setProperty("J134003", "赵六");//如果出现放入重复值的情况,相当于修改而不是新增 String name = props.getProperty("J134001");//通过键取集合中的值,如果键不存在则返回null System.out.println(name); props.remove("J134002");//根据键删除整个键值对 System.out.println(props.getProperty("J134002")); int size = props.size();//获得容器中的元素个数//Properties操作的文件必须是固定格式的文本文件---属性文件---将是工作中使用率排名第二的配置文件 //存文件 // try { // props.store(new FileOutputStream("file/student.properties"), ""); // } catch (FileNotFoundException e) // e.printStackTrace(); // } catch (IOException e) {// e.printStackTrace(); // } //读文件 Properties newProps = new Properties(); try { newProps.load(new FileInputStream("file/student.properties")); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out.println(newProps.getProperty("J134001")); System.out.println(newProps.size()); } }