第十四天:集合框架
- 为什么要出现这么多的容器呢?
因为每一个容器对数据的存储方式(数据结构)都不相同,
- 为什么出现集合类?
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最长用的一种方式。
- 数组和集合类都是容器,有什么不同?
数组的长度是固定的,容器的长度是可变的。
数组中可以存储基本数据类型,集合只能存储对象
- 集合类的特点
集合只用于存储对象,集合的长度是可变的,集合可以存储不同类型的对象。
- Collection 接口的几个子接口
List(列表):可以存放重复的元素,元素存取的有序的
Set(集):不可以存放重复的元素,元素存取是无序的
Vector:线程安全,但速度慢,已被arraylist取代
Arraylist:线程不安全,查询速度快
Linkiedlist:链表结构,增删速度快。
Hashset :线程不安全,存取速度快。
思考:他是如何保证元素的唯一性的呢?
通过equals方法和hashcode方法来保证元素的唯一性
TreeSet:线程不安全,可以对set集合中的元素进行排序
思考:他的排序是如何进行的?
通过compareTo或者compare 方法中的来保证元素的唯一性。元素是以二叉树的形式存 放的。
Hashtable:线程安全,速度慢,不允许存放null值,已被hashmap取代
Treemap:对键进行排序,排序原理与treeset相同
- 取出list集合中的元素的方式:
Get(int index):通过脚标获取元素
Iterator():通过迭代的方法获取迭代对象
- 迭代
迭代式取出集合中元素的一种方式
因为collection中有iterator方法,所以每一个子类集合对象都具备迭代器。
用法:
ArrayList al= new ArrayList();
al.add("name12");
al.add("name12");
al.add("name12");
al.add("name12");
al.add("name12");
//使用方法1
for(Iterator iter =al.iterator();iter.hasNext();)
{
System.out.print(iter.next()+"**");
}
System.out.println();
//使用方法二
Iterator iter = al.iterator();
while(iter.hasNext())
{
System.out.print(iter.next());
}
- 迭代注意事项
迭代器在collection接口中是通用的,他替代了vector类中的Enumeration(枚举)。
迭代器的next方法是自动向下取元素,要避免出现NosuchElementException
迭代器的next方法返回值类型是object,所以要记得类型转换
- 思考:为什么next方法的返回值是Object类型呢?
- 泛型的特点
提高了程序的安全性
将运行期遇到的问题转移到了编译期
省去了类型强转的麻烦
泛型类的出现优化了程序设计
- Map与collection在集合框架中属于并列存在的
- Map存储的是键值对
- Map存储元素使用put方法,collection使用add方法
- Map集合没有直接取出元素的方法,而是先转成set集合,再通过迭代获取元素
- Map集合中键要保证唯一性
- 集合框架中的工具类
Collection:
对集合进行查找
取出集合中的最大值,最小值
对list集合进行排序
Arrays
将数组转成list集合
对数组进行排序
对数组进行二分查找
- Collection在jdk1.5后现的父接口iterator就是提供了这个for语句
格式:
For(数据类型 变量名:数组或集合)
{
执行语句;
}
简化了对数组,集合的遍历
- 函数的另一种表现形式:
返回值类型 函数名(参数类型… 形式参数)
{
执行语句;
}
其实接收的就是一个数组,可以指定实际参数的个数