概述
1.由于数组长度是固定的,所以存放数据时不能根据数量变化而变化,所以有了集合
2.集合主要有这几种:
Map 键值对存储
set 无序不可重复
list 有序可重复存储
Collection是放一个一个对象的,Map 是放键值对的
Collections是一个类,容器的工具类,就如同Arrays是数组的工具类
- 特性:
-
例子
-
ArrayList vs LinkedList
ArrayList是顺序结构,查找很快,但插入,删除数据慢
LinkedList 是链表结构,查找慢,但 插入,删除数据快。除了实现了List外,还实现了Queue接口(队列)和Deque(双向链表)。接口有的方法它都有。
由于List查找的低效率,所以HashMap相对于它的查找性能更好些,因为在HashMap中有HashCode,所有的对象,都有一个对应的hashcode(哈希码),就相当于字典里的目录。那怎么判断对象是否重复,是由两个步骤判断的:
hashcode是否一样
如果hashcode不一样,就是在不同的坑里,一定是不重复的
如果hashcode一样,就是在同一个坑里,还需要进行equals比较
如果equals一样,则是重复数据
如果equals不一样,则是不同数据。
对于HashMap而言,key是唯一的,不可以重复的。
对于HashSet而言,元素不能重复,而且没有顺序。因为它在里面封装了个Map,所以它不能重复。而TreeSet: 从小到大排序而且不能重复。
HashMap和Hashtable都实现了Map接口,都是键值对保存数据的方式
区别1:
HashMap可以存放 null
Hashtable不能存放null
区别2:
HashMap不是线程安全的类
Hashtable是线程安全的类
4.常用方法:
集合的遍历
List<Hero> heros = new ArrayList<Hero>();
//放5个Hero进入容器
for (int i = 0; i < 5; i++) {
heros.add(new Hero("hero name " +i));
}
//第一种遍历,使用迭代器
Iterator<Hero> it= heros.iterator();
//从最开始的位置判断"下一个"位置是否有数据
//如果有就通过next取出来,并且把指针向下移动
//直到"下一个"位置没有数据
while(it.hasNext()){
Hero h = it.next();
System.out.println(h);
}
// 第三种,增强型for循环
System.out.println("--------增强型for循环-------");
for (Hero h : heros) {
System.out.println(h);
}