集合框架的概述
- 集合、数组都是对多个数据进行存储操作的结构 java容器
此时的存储是内存层面 ,不是持久化存储
2.数组(Array)的特点- 初始化时 长度已经确定
- 数据初始化时,其元素类型也确定
缺点: - 一旦初始化 容器长度就不能变
- 提供的方法非常有限,删除、插入、添加 效率比较低
- 获取数组的实际元素个数 麻烦
- 数组时有序的、可重复
Collection
用于存储单个单个的对象
- **List接口**
存储有序的、可重复的数据
--ArrayList、LinkedList、Vector
- **Set接口**
存储无序的、不可重复的数据
--HashSet、LinkedHashSet、TreeSet
Map
用于存储key—value 键值对
--Hashtable、HashMap、TreeMap、Porperties、LinkedHashmap
Iterator
Collection coll=new ArrayList();
Collection coll1=new ArrayList();
coll.add("jack");
coll1.add("jack");
coll.add("jack");
coll.add("jack");
coll.add("jack");
coll.addAll(coll1);
//iterator相当于指针作用
Iterator iterator = coll.iterator();
//是否有下个数据
while (iterator.hasNext()){
//当前指针的下个数据
System.out.println(iterator.next());
Object next = iterator.next();
if("jack".equals(next)){
//删除此数据
iterator.remove();
}
}
List
三者的特点:存储有序的,可重复的数据
- ArrayList(线程不安全,效率高)
底层使用的Object[ ] 就是数组形式存储 - LinkedList(线程安全,效率低)
底层使用的双向链表存储,删除、插入效率快 - Vector(线程安全,效率低)
底层使用的Object[ ] 就是数组形式存储
ArrayList的源码分析
在jdk1.7时
ArrayList list=new ArrayList();底层创建了长度为10的Object[ ]数组elemetData
list add(123)//elemetData[0]=new Integer(123);
.
.
一直add当容器不足时 扩张容器,默认时,扩充他的1.5倍,并且将原有的数组放入其中
在jdk1.8时
ArrayList list=new ArrayList();底层创建了Object[ ]数组elemetData初始化为{ }
list add(123)//elemetData[0]=new Integer(123);
.
.
一直add当容器不足时 扩张容器,默认时,扩充他的1.5倍,并且将原有的数组放入其中
小结:jdk1.7时相当于单例的饿汉式,而jdk1.8相当于懒汉式,延迟了数组的创建,节省了内存。
Set
底层:数组+链表
存储无序的,不可重复的数据
HashSet 线程不安全 可以存储null
public class SetTest {
//
// 1.无序性
// 不等于随机性 是通过数据的哈希值进行排序
// 2.不可重复性
// 保证元素添加是按照equals判断时,不能返回true 即:相同元素只添加了一个
//
// add时候 首先已哈希值做判断 相同的情况下就以equals来做判断
// 如果相同返回true抛弃此元素保持原来的
//
public static void main(String[] args) {
Set set=new HashSet();
//User对象需要重写equals方法和hashCode方法
set.add(new User("sss",1));
set.add(new User("sss",1));
Iterator iterator = set.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
LinkedHashSet
遍历还是添加的顺序
其添加数据的同时,每个数据还维护了俩个引用,记录前后的数据
这样遍历的效率高于其父类HashSet
TreeSet
按照对象指定属性 进行排序
- 添加数据必须是相同类的对象
- 自然排序和定制排序俩种方法
- 自然排序的标准时compareTo()返回0,不是equals
定制排序的标准时compare()返回0
Map
HashMap
线程不安全 效率高 存储null的key和value
LinkeHashMap:遍历的时候可以按照原来的顺序来遍历
TreeMap
Hashtable 线程安全的、效率低;不能存储null