- 数组存储数据方面的特点和弊端
- 数组一旦初始化,其长度就是确定的。
- 数组中的多个元素是依次紧密排列的,有序的,可重复的
- (优点)数组一旦初始化完成,其元素的类型就是确定的。不是此类型的元素,就不能添加到此数组中。int[] arr = new int[10];arr[o] = 1;
- arr[1] =“AA”;//编译报错
- Object[] arr1 = new Object[10];
- arr1[o] = new String();
- arr1[1] = new Date();
- (优点)元素的类型既可以是基本数据类型,也可以是引用数据类型。
- 数组存储多个数据方面的弊端:
- 数组一旦初始化,其长度就不可变了。
- 数组中存储数据特点的单一性。对于无序的、不可重复的场景的多个数据就无能为力了。
- 数组中可用的方法、属性都极少。具体的需求,都需要自己来组织相关的代码逻辑。
- 针对于数组中元素的删除、插入操作,性能较差。
- 集合框架概述
- java.util.Collection:存储一个一个的数据
- -----子接口:List :存储有序的、可重复的数据 (“动态"数组)
- l---- ArrayList(主要实现类)、LinkedList、Vector
- -----子接口,set :存储无序的、不可重复的数据(高中学习的集合)---- HashSet(主要实现类)、LinkedHashSet、TreeSet
- java.util.Map:存储一对一对的数据(key-value键值对,(x1,y1)、(x2,y2) --> y=f(x),类似于高中的函数)---- HashMap(主要实现类)、LinkedHashMap、TreeMap、Hashtable、Properties
- Collection的常用方法
- Add(Object obj);
- addAll(Collection coll);
- Clear();
- isEmpty();
- Size();
- Contains(Object obj);
- ContainsAll(Collection coll)
- retainAll(Collection coll)
- Remove(Object obj)
- RemoveAll(COllection coll)
- hashCode()
- Equals()
- toArray()
- Iterator()---->引出迭代器接口
向Collection中添加元素的要求:
>要求元素所属的类一定要重写equals()!
集合与数组的相互转换:
集合 ---> 数组:toArray()
数组 ---> 集合:调用Arrays的静态方法asList(object ... objs)
3.2 迭代器端口:
- 设计模式的一种
- 迭代器不负责数据的存储;负责对集合类的遍历
2.何获取迭代器(Iterator)对象?
Iterator iterator = coll.iterator();
3.如何实现遍历(代码实现)
//hasNext():判断是否还有下一个元素
while(iterator.hasNext()){
//next():@指针下移 @将下移以后集合位置上的元素返回
System.out.println(iterator.next());
}
- Collection的子接口: List
常用方法;
增
Add(Object obj)
addAll(Collection coll)
删
Remove(Object obj)
Remov(int index)
改
Set(int index ,Onject ele)
查
Get(int index)
插
Add(int index,Object ele)
addALL(int index,Collection eles)
长度
Size()
遍历
Itertor(),使用迭代器进行遍历
争强for循环
一般的for循环
List及其实现类特点
java.util.Collection:存储一个一个的数据
|-----子接口:List:存储有序的、可重复的数据 ("动态"数组)
1|--- ArrayList:List的主要实现类:线程不安全、效率高:底层使用Object[]数组储存
在添加数据、查找数据时,效率高;插入、删除数据时效率低
|----LinkedList底层使用双向链表的方式进行储存
在添加数据、查找数据时,效率低;插入、删除数据时效率高
|---Vector:List的古老实现类:线程安全的、效率低;
- Collection的子接口: Set
- Set中的常用的方法都是Collection中声明的方法,没有新增的方法
- 。常见的实现类的对比
- java.util.Collection:存储一个一个的数据
- -----子接口:Set:存储无序的、不可重复的数据(高中学习的集合)
- ---- HashSet:主要实现类,底层使用的是HashMap,即使用数组+单向链表+红黑树结构进行存储。 (jdk8
- 序
- ---- LinkedHashSet: 是HashSet的子类,在现有的数组+单向链表+红黑树结构的基础上,又添加了一组双向链表,用于记录添加元素的先后顺序。即,我们可以按照添加元素的顺
- 实现遍历。便于频繁的查询操作。
- ---- TreeSet:底层使用红黑树存储。可以按照添加的元素的指定的属性的大小顺序进行遍历。
- Map接口
- 它创建了一个 TreeMap 实例并使用自定义的 Comparator 对象来进行排序。TreeMap 是一个基于红黑树实现的有序映射,你可以用自定义的 Comparator 来定义元素之间的排序规则。
- >底层使用红黑树存储;
- >可以按照添加的key-value中的key元素的指定的属性的大小顺序进行遍历
- >需要考虑使用1.自然排序 2.定制排序。
>要求:向TreeMap中添加的key必须是同一个类型的对象。