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接口特点:

  1. 它是一个元素存取有序的集合,
  2. 它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素。
  3. 集合中可以有重复元素,通过元素的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方法的时候,不能有重复的元素,否则会抛异常。