集合的引入
Collections
Iterator
使用泛型
集合和数组相似点
都可以存储多个对象,对外作为一个整体存在
数组的缺点
长度必须在初始化时指定,且固定不变
数组采用连续存储空间,删除和添加效率低下
数组无法直接保存映射关系
数组缺乏封装,操作繁琐
Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中
Collection 接口存储一组不唯一,无序的对象
List 接口存储一组不唯一,有序(索引顺序)的对象
Set 接口存储一组唯一,无序的对象
Map接口存储一组键值对象,提供key到value的映射
2.1 List
特点:有序 不唯一(可重复)
ArrayList:ArrayList是一个对数组进行了封装的容器。使用过程中ArrayList对于数据的查找及遍历效率较高。
ArrayList常用方法
LinkedList:LinkedList在底层是一双向链表的形式进行实现,LinkedList在执行数据的维护过程中效率较高。LinkedList允许以队列或栈的方式访问数据。
LinkedList常用方法:
List的遍历方法
集合中内容是否相同
通过equals进行内容比较,而是==引用比较
2.2 Set
特点:无序 唯一(不重复)
HashSet
HashSet常用方法:
注意:HashSet中不支持下标方式访问及修改元素值。
LinkedHashSet
TreeSet
Set常用方法
Set相对Collection没有增加任何方法
Set的遍历方法
HashSet、HashMap或Hashtable中对象唯一性判断
重写其hashCode()和equals()方法
TreeSet中指明排序依据
实现Comparable接口 创建实现Compator接口的类。
哈希表存储原理
2.3 Map
特点 key-value映射
HashMap
LinkedHashMap
TreeMap
有序 速度没有hash快
问题:Set和Map有关系吗?
采用了相同的数据结构,只用于map的key存储数据,就是Set
专门用来操作集合的工具类
常用方法
Collections.addAll(list, "aaa","bbb","ccc","ccc");
int index = Collections.binarySearch(list, "ccc");
Collections.copy(list2, list);
Collections.fill(list3, "888");
String max = Collections.max(list4);
String min = Collections.min(list4);
Collections.reverse(list4);
List list5 = Collections.synchronizedList(list4);
所有集合类均未提供相应的遍历方法,而是把把遍历交给迭代器完成。
迭代器为集合而生,专门实现集合遍历
Iterator是迭代器设计模式的具体实现
Iterator方法
问题:可以使用Iterator遍历的本质是什么
实现Iterable接口
For-each循环
For-each缺陷:
数组:
集合:
与使用Iterator相比,不能方便的删除集合中的内容
For-each总结:
除了简单遍历并读出其中的内容外,不建议使用增强for
JDK1.4以前类型不明确: 装入集合的类型都被当作Object对待,从而失去自己的实际类型。 从集合中取出时往往需要转型,效率低,容易产生错误。
泛型:在定义集合的时候同时定义集合中对象的类型
好处: 增强程序的可读性和安全性
集合和数组的比较
Collection和Collections的区别
ArrayList和LinkedList 的联系和区别
Vector和ArrayList的联系和区别
HashMap和Hashtable的联系和区别
集合和数组的比较:
数组不是面向对象的,存在明显的缺陷,
集合完全弥补了数组的一些缺点,比数组更灵活更实用,
可大大提高软件的开发效率而且不同的集合框架类可适用于不同场合。具体如下:
1:数组能存放基本数据类型和对象,而集合类中只能放对象。
2 : 数组容量固定且无法动态改变,集合类容量动态改变。
3:数组无法判断其中实际存有多少元素,length只告诉了array容量
4:集合有多种实现方式和不同适用场合,不像数组仅采用顺序表方式
5:集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性调用即可实现各种复杂操作,大大提高软件的开发效率
ArrayList和LinkedList 的联系和区别
联系: 都实现了List接口 有序 不唯一(可重复)
ArrayList
在内存中分配连续的空间,采用了顺序表结构,实现了长度可变的数组
优点:遍历元素和随机访问元素的效率比较高
缺点:添加和删除需大量移动元素效率低,按照内容查询效率低,
LinkedList
采用链表存储方式。
缺点:遍历和随机访问元素效率低下
优点:插入、删除元素效率比较高(但是前提也是必须先低效率查询才可。如果插入删除发生在头尾可以减少查询次数)
Collection和Collections的区别:
Collection是Java提供的集合接口,存储一组不唯一,无序的对象。它有两个子接口List和Set。
Java中还有一个Collections类,专门用来操作集合类 ,它提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
Vector和ArrayList的联系和区别:
实现原理相同,功能相同,都是长度可变的数组结构,很多情况下可以互用
两者的主要区别如下:
HashMap和Hashtable的联系和区别
实现原理相同,功能相同,底层都是哈希表结构,查询速度快,在很多情况下可以互用
两者的主要区别如下: