Collection集合
1.1集合概述
- 集合:集合是java提供的一种容器,可以用来存储多个数据。
集合和数组既然都是容器,他们有什么区别?- 数组的长度是固定的,集合的长度是可变的。
- 数组中存储的都是同意类型的元素,可以存储基本数据类型值。集合存储的都是对象,而且对象的类型可以不同。在开发过程中一般当对象多的时候,使用集合进行存储。
1.2集合框架
集合按照其存储结构可分为两大类,分别是单列集合java.util.Collection和双列集合java.util.map。
- Collection:单列集合的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是java.util.List和 java.util.Set。
其中,List的特点是元素有序、元素可重复、有索引,可以使用普通的for方法循环遍历。
Set的特点是元素无序、元素不可重复、没有索引,不可以使用普通的for方法循环遍历。
List接口可分为ArrayList和LinkedList
Set接口可分为HashSet和TreeSet
迭代器
2.1 Iterator接口
Iterator接口也是java集合中的一员,但它与Colloection、Map接口有所不同。
Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为迭代器。
获取迭代器的方法:
- public Iterator ieterator():获取集合对应的迭代器,用来遍历集合中的元素。
迭代:即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续判断如果还有就再取出来。一直把集合中的元素全部取出。这种方式叫做迭代。
2.2增强For循环
增强for循环,也称for each循环是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历过程中,不能对集合中的元素进行增删操作。
格式:
for(元素的数据类型 变量:Colllection集合or数组){ //写操作代码 }
它用于遍历数组和Collection。通常只遍历元素。
代码如下:
private static void array_for(){ int arr[] = {3, 5, 9, 6, 41}; for (int number : arr) { System.out.println(number); } }
泛型
3.1泛型概述
在前面学习集合时,我们都知道集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。
创建集合对象,使用泛型
好处:
1、避免了类型转换的玛法,存储的是什么类型,取出的就是什么类型。
2、把运行期异常(代码运行之后会抛出的异常),提升到了编译期(写代码时会报错)
弊端:
泛型是什么类型,只能存储什么类型的数据。
3.2泛型的定义与使用
泛型,用来灵活的将数据类型应用到不同的类、方法、接口当中。将数据类型作为参数进行传递。
定义和使用含有泛型的类
定义格式:
修饰符 class 类名<代表泛型的变量>{ }
含有泛型的方法
定义格式:
修饰符<代表泛型的变量> 返回值类型 方法名(参数){ }
含有泛型的接口
定义格式:
修饰符 interface 接口名<代表泛型的变量>{ }
例如:
public interface MyGenericInterface<E>{ public abstract void add(E e); public abstract E getE(); }
泛型通配符
当使用泛型类或者接口时,传递的数据中,泛型类型不确定,可以通过通配符<?>表示。但是一旦使用泛型的通配符后,只能使用Object类中的共性方法,集合元素自身方法无法使用。
通配符基本使用
泛型的通配符:不知道使用什么类型来说接收的时候,此时可以使用?,?表示未知通配符。
此时只接受数据,不能往该集合中存储数据。
List集合
1.1 List接口介绍
java.util.List接口继承Collection接口,是单列集合的一个重要分支。
List接口特点:
- 它是一个元素存取有序的集合,
- 它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素。
- 集合中可以有重复元素,通过元素的equals方法,来比较是否为重复的元素。
List接口中常用的方法
- add()
- remove()
- get()
等等,具体可查API;
ArrayList集合
java.util.ArrayList集合数据存储的结构是数组结构。元素增删慢,查找快,ArrayList是最常用的集合。
LinkedList集合
java.util.LinkedList集合数据存储的结构是链表结构。方便元素的添加、删除的集合。
LinkedList的方法:
public void addFirst(E e):将指定的元素插入列表开头。
HashSet集合
Map集合:
Map<K,V> K代表键的类型 ,V代表值的类型
特点:
1.Map集合是一个双列集合,一个元素包含两个值(一个key,一个value)
2.Map集合中的元素,key和value的数据类型可以相同也可以不同
3.Map集合中的元素,key是不允许重复的,value可以重复。
4.Map集合中的元素,key和value是一一对应的。
HashMap集合的特点:(无序)
1.HashMap集合底层是哈希表:查询速度特别快
JDK1.8之前:数组+单向链表
JDK1.8之后:数组+单向链表/红黑树(链表的长度超过8):提高查询速度
2、HashMap集合是一个无序的积极和,存储元素和取出元素的顺序可能不一致
LinkedHashMap的特点:(有序)
1.LinkedHashMap集合底层是哈希表+链表(保证迭代的顺序)
2.LinkedHashMap集合是一个有序的集合,存储元素和取出元素的顺序是一致的。
JDK新特性:List接口、Set接口、Map接口:里面增加了一个静态的方法of。可以给集合一次性添加多个元素。static List of(E… elements)
使用前提:当集合存储的元素个数已经确定,不在改变时使用。
注意:
1、of方法只适用于List接口、Set接口、Map接口,不适用于接口的实现类
2、of方法的返回值是一个不能改变的集合,集合不能在使用add,put方法添加类,会抛异常
3、Set接口和Map接口在调用of方法的时候,不能有重复的元素,否则会抛异常。