集合类的由来:
对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定。
就使用集合容器进行存储。
集合的特点:
1,用于存储对对象的容器。
2,集合的长度是可变的。
3,集合中不可以存储基本数据类型值。
4,有些方便放入和取出,有些方便查找。
Collection接口:
add(Object obj);将指定的对象添加到该集合中
remove(Object obj);将指定的对象移除该集合
isEmpty(); 返回boolean,用于判断当前集合是否为空,如果集合中不包含元素,则返回true,否则返回false
iterator();返回在此Collection的元素上进行迭代的迭代器,用于遍历集合中的对象
size();返回int值,获取该集合的元素个数
clear();移除该集合的所有对象,清空该集合。
contains(Object obj);用来查看该集合中是否存在指定的对象,返回值为boolean类型,如果存在则返回true,否则返回false
removeAll(Collection coll)方法:
该方法用来从该集合中移除同时包含在指定参数集合中的对象。如果集合中包含符合条件的对象则返回true,否则返回false
containsAll(Collection coll):与removeAll(Collection coll)相反
5,获取:
int size();
Iterator iterator():取出元素的方式:迭代器
该对象必须依赖于具体容器,因为每一个容器的数据结构都不同。
所以该迭代器对象是在容器中进行内部实现的
对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可,
也就是iterator方法。
Iterator接口就是对所有的Collectionon容器进行元素取出的公共接口。
Collecton
|--List:有序(存入和取出的顺序一致),元素都有索引,元素就可以重复
|--Set:元素不能重复,无序。
List:特有的常见方法,有一个共性特点就是都可以操作角标
List的常用子类
|--Vector:内部是数组数据结构,是同步的
|--ArrayList:内部是数组数据结构,不同步,效率高,替代Vector,查询速度快
|--LinkedList:内部是链式数据结构,不同步的,增删元素速度快
Set:元素不可以重复,无序
其中的方法和Collection一致
HashSet:内部数据数据结构是哈希表,是不同步的。
如何保证该集合的元素唯一性呢?
是通过对象的hashCode和equals方法来完成对象的唯一性的。
如果对象的hashCode值不同,那么不用判断equals方法,就直接存储到哈希表中。
如果对象的hashCode值相同,那么要再次判断对象的equals方法是否为true。
如果为true,视为相同元素,不存,如果为false,那么视为不同元素,就进行存储。
记住:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。
一般情况下,如果定义的类会产生很多对象,比如人,学生,书,通常都需要覆盖equals,hashCode方法。
建立对象判断是否相同的依据。
|--TreeSet:可以对Set集合中的元素进行排序。是不同步的
判断元素的唯一性的方式:就是根据比较方法的返回结果是否是0,是0,就是相同元素,不存。
TreeSet对元素进行排序的方式一:
让元素自身剧本比较功能,晕啊素需要实现Comprable接口,覆盖comparaTo方法。
如果不要按照对象中具备的自然顺序进行排序,或者对象不具备自然顺序,怎么办?
可以使用TreeSet集合第二种排序方式二:
让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法。
将该类对象作为参数传递给TreeSet集合的构造函数。
====================================
Map:一次添加一对元素。 Collection 一次添加一个元素
Map也称双列集合,Collection集合称为单列集合
其实map集合中存储的就是键值对
map集合中必须保证键的唯一性
常用方法:
put(k key,v value); 返回前一个和key关联的值,如果没有,返回null;
clear();清空map集合。
remove(key);根据指定的key翻出这个键值对。
containsKey(key);
containValue(value);
isEmpty();
get(key);通过键获取值,如果没有改建返回null;
可以通过返回null,来判断是否包含指定键。
size();获取键值对的个数。
取出map所有的元素。
方式一:
原理:同过keySet方法获取map中所有的键所在的Set集合,在通过Set的迭代器获取到每一个键,
在通过map集合的get方法获取每一个键对应的值。
例如:Set<Integer> keySet=map.keySet();
Iterator it=keySet.iterator();
while(it.hasNext()){
Integer key= (Integer) it.next();
String value=map.get(key);
System.out.println(key+" "+value);
}
方式二:
通过Map转成set就可以迭代。
找到了另一个方法,entrySet
该方法将键和值的映射关系作为对象存储到了Set集合中,而这个映射关系的类型就是Map、Entry类型
Set<Map.Entry<Integer, String>> entrySet=map.entrySet();
Iterator<Map.Entry<Integer, String>> it2=entrySet.iterator();
while(it2.hasNext()){
Map.Entry<Integer, String> me=it2.next();
Integer key=me.getKey();
String value=me.getValue();
System.out.println(key+" "+value);
}
Map常用的子类:
|--Hashtable:内部结构是哈希表,是同步的。不允许null作为键,bull作为值。
|--Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合。
|--HashMap:内部结构是哈希表,不是同步的,允许null作为键,null作为值。
|--TreeMap:内部结构是二叉树,不是同步的,可以对Map集合中的键进行排序。