首页 > 代码库 > 集合框架
集合框架
1 集合类的由来
对象用于封装特有数据,对象多了就需要存储,如果对象的个数不确定,就使用集合容器进行存储。
集合特点:
1 用于存储对象的容器
2 集合的长度是可变的。
3 集合中不可以存储基本类型值
4 集合装的全是引用
2 集合体系
集合容器因为内部的数据结构不同,有多种具体容器
不断的向上抽取,就形成了集合框架
框架的顶层:collection接口
Collection的常见方法
1 添加
2 删除
3 判断
4 获取
Iterator iterator() 去除元素的方式 :迭代器
该对象必须依赖于具体容器,因为每一个容器,因为每一个容器具体的数据结构都不同
所以该迭代器对象是在容器内部实现的
对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可。
也就是Iterator方法
Iterator接口就是对所有的Collcetion容器进行取出的公共接口。
5 其他
取交集 boolean retainAl(Collection coll)
Object[] toArray() 将集合转成数组、
具体方法查阅API
3 ArrayList() //数据结构为数组,元素可以重复 而且有序
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo {
public static void main(String[] args) {
Collection coll=new ArrayList();
show(coll);
}
private static void show(Collection coll) {
//1 添加元素
coll.add("abc1");
coll.add("abc12");
coll.add("abc12");
coll.add("abc13");
//2 删除元素
coll.remove("abc12");
//3 清空集合
//coll.clear();
coll.contains("abc4");
System.out.println(coll);
}
}
更多集合方法 请查阅API
重点方法 获取:迭代器方法
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionDemo {
public static void main(String[] args) {
Collection coll=new ArrayList();
show(coll);
}
private static void show(Collection coll) {
//1 添加元素
coll.add("abc1");
coll.add("abc12");
coll.add("abc12");
coll.add("abc13");
//2 删除元素
//coll.remove("abc12");
//3 清空集合
//coll.clear();
//coll.contains("abc4");
//迭代器方法
Iterator<String> it=coll.iterator();
while(it.hasNext())
System.out.println(it.next());
System.out.println(coll);
}
}
4 List和Set的特点
Collection下有两个子体系
一个是List 一个是Set
List 有序的Collection
List :有序(存入和取出的顺序一致),元素都有索引,元素可以重复。
Set: 元素不能重复,无序。
List有如下方法(特点是可以操作角标)
添加
删除
修改
获取
具体方法查阅API
List有两种取元素的方法
一个是迭代器
另外一个是for(int x=0;x<list.size();x++)
{
System.out.println(“get:”+list.get(x);
}
注意:在List迭代过程中不要使用集合操作,不然会抛出ConcurrentModificationException
如果要在迭代过程中添加元素,可以使用ListIterator迭代器(它有添加元素的方法),这个迭代器也叫做列表迭代器。(该迭代器有增删改查的功能,只有List集合具备这个迭代器)
List子类
---Vector:内部是数组数据结构,是同步的,增删查询都很慢
---ArrayList:内部是数组数据结构,是不同步的,替代了Vector,查找速度快
---LinkedList:内部是链表结构,是不同步的,增删速度快
因为这些子类有自己的数据结构,所以有自己一些比较特殊的方法,具体使用请查阅API(数据结构->方法)
Set集合
特点:元素不可以重复,是无序的。(但是按一定方法,保证元素一定的规则)
Set接口的方法与collection一样。
子类:
HashSet
底层结构是哈希表
元素的唯一性是通过对象的hashcode和equals方法来完成对象唯一性的
如果对象的hashcode值不同,那么不用判断equals方法,就直接存储到哈希表中。
如果对象的hashCode值相同,那么要调用对象的equals方法判断是否相等
如果为true 视为相等 不存,如果为false,则进行存储
记住:如果元素要存储到HashSet中,必须覆盖hashCode方法和equals方法
LinkedHashSet
在哈希表的基础上设置了指针,保证存取一样
TreeSet:可以对Set集合中的元素进行排序,是不同步的
判断元素唯一性的方式,就是根据比较方法的返回结果是否是0,是0,就是相同元素,不存。
TreeSet对元素进行排序的方式一:
让元素自身具备比较功能,就需要实现Comparable接口,覆盖compareTo方法
如果不按照对象中具备的自然顺序进行排序。如果对象中不具备自然顺序,该怎么办?
可以使用TreeSet集合第二种方式
让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法
将该类的对象作为参数传递给TreeSet集合的构造函数
5MAP集合
存储的是键值对(SET,LIST)
特点:存储的键是唯一的
有如下方法
添加
删除
获取
判断
重点方法:如何遍历键值对呢?
方式1
通过keyset方法获取键对应的SET集合,通过set集合的迭代器遍历键,再拿到对应的值。
方式2(比较不好理解)
通过entryset方法获取map集合对应的键值映射关系对应的set集合,这个集合存储的类型是Map.Entry类型,再通过Map.Entry类方法获取键值。
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Demo2 {
public static void main(String[] args) {
Map<String, Integer> map=new HashMap();
map.put("小陈", 20);
map.put("小张", 40);
map.put("小李", 10);
map.put("小王", 30);
map.put("小武", 50);
Set<Map.Entry<String,Integer>> entrySet=map.entrySet();
Iterator <Map.Entry<String,Integer>> it=entrySet.iterator();
while(it.hasNext())
{
Map.Entry<String, Integer> me=it.next();
String key=me.getKey();
Integer value=http://www.mamicode.com/me.getValue();
System.out.println(key+":"+value);
}
}
}
map接口常用子类
HashTable
常用子类:Properties.
HashMap
LinkesHashMap
TreeMap
它们的特点对应于它们的set结合的特点
并且根据Set的特点覆盖equals hashcode 和排序方法。
4 集合框架工具类
Collections是集合框架的工具类 里面的方法都是静态的。
具体使用查阅API
集合框架