Java集合和泛型
Java集合和泛型
集合框架
--
集合按照储存结构分为两大类:Collection集合和Map集合。这两者是Java集合框架的根接口,这两个接口又包含了一些子接口或者实现类。
--
Collection接口主要掌握其子接口:List和Set接口。
一、List接口特征
·1、List接口继承自Collection接口。
·2、有序的集合,储存和取出元素的顺序相同。
·3、允许储存重复的元素
·4、有索引,允许使用普通的for循环遍历。
二、Set接口特征
·1、Set接口继承自Collection接口。
·2、无序的集合。
·3、不允许储存相同的元素
4、没有索引,不能使用普通的for循环遍历。
Collection接口主要方法和功能描述
1、boolean add(E e) 将给定对象添加到当前集合
2、void clear() 清空集合中 所有的元素
3、Iterator
4、boolean remove(E e) 将给定对象在当前集合中删除
5、boolean contains(E e) 判断当前集合中是否包含 给定对象
6、boolean isEmpty(E e) 判断 当前集合是否为空
7、int size() 返回集合中的元素个数
8、Object[ ] toArray() 把集合中的元素储存到数组中
Collection接口无法实例化,也就无法创建对象,故一般通过多态使用Collection接口的子类来创建集合容器:
语法: Collection coll = new ArrayList();
或者直接使用Collection子类来创建集合容器:
语法: ArrayList al = new ArrayList();
###Iterator接口
Java集合框架的集合类,也可以称为容器;容器种类多样,且每种容器的内部结构不同,所以为了更简单地对容器内元素进行操作,Java引入了 Iterator接口。Iterator对象也被称为迭代器。
迭代是集合元素的通用获取方式,取出元素前先判断集合中是否有该元素。如果集合中有该元素,则取出,然后进行判断是否还有该元素,一直把集合中的该元素全部取出。
主要方法和功能概述:
1、boolean hasNext() 如果仍有该元素可以迭代,则返回true
2、E next () 返回迭代的下一个元素
3、void remove() 删除集合里上一次next()方法返回的元素
Iterator接口无法直接使用,因此需要使用Iterator接口的实现类对象,而Collection接口中的Iterator方法,返回的就是迭代器的实现类对象。
增强for循环
增强for循环也被称为 (for each 循环),是专门遍历数组和集合的。其内部原理 是通过 Iterator 实现的,在遍历的过程中不能对集合中的元素进行增删操作。
语法: for(变量类型 变量: 需迭代的数字或者集合)
泛型
泛型本质是参数化类型,也就是把所操作的数据类型指定为一个参数,这个参数可以用在类、接口、方法中分别创建,成为泛型类、泛型接口、泛型方法。
泛型可以看成是一个变量,用来接收数据类型。
语法:(E 为任意的引用数据类型,如String等,且不能为基本数据类型)
ArrayList
JDK1.7以上可以右边的 E 可以不用写,即:
ArrayList
在集合中可以存放任意对象,只要把对象存储到集合中,对象都会被替换为Object类型,当需要取出一个对象并对其进行操作时,则必须采用数据转换。
集合在不使用泛型时,默认类型是Object类型,可以存储任意类型的数据,但是会引发异常。
List接口删除重复元素
List接口常用方法和功能描述:
1、boolean add( int index , E element) 向集合的尾部添加指定的元素
2、void clear() 从集合中移除所有的元素
3、boolean contains(E e) 如果当前集合中包含指定的元素,返回true
4、E get(int index) 返回集合中指定位置的元素
5、int indexOF( Object o) 返回集合中第一次出现的指定元素的索引,如果集合中不含有该元素,则返回 -1
6、 E remove(E e) 移除列表中指定位置的元素
7、boolean isEmpty(E e) 判断当前集合是否为空
7、int size() 返回集合中的元素个数
8、E set( int index , E element) 用指定元素替换集合中指定位置的元素
ArrayList集合
ArrayList集合是List接口的子类,其储存结构是数组结构。元素增删慢,但查找快。由于开发中使用最多的就是查询数据、遍历数据,故ArrayList集合是最常用的集合。其集合中方法与List集合方法基本一致。
LinkedList集合
LinkedList集合也是List接口的子类,其储存结构是链表结构,方便添加和删除元素,但查询元素稍慢。其除了继承List接口方法,还自定义了一些特有方法,主要是对集合首尾元素的添加和删除操作。
LinkedList集合类特有方法和功能描述:
1、public void addFirst(E e) 将指定元素添加到集合的首部
2、public void add(last e) 将将指定元素添加到集合的尾部
3、public E getFirst(E e) 返回集合中的第一个元素
4、public E getLast(E e) 返回集合中的最后一个元素
5、public E removeFirst() 移除并返回集合中的第一个元素
6、public E removeLast() 移除并返回集合中的最后一个元素
set接口删除重复值
1、set接口
set接口继承自Collection接口,方法基本相同。从set接口中取出元素的方式可以是:采用迭代器和增强for循环
2、HashSet集合
是set接口的一个实现类,HashSet集合的底层数据结构是哈希表,HashSet集合是根据对象的哈希码来确定元素在集合中储存位置,因此HashSet集合具有良好的存储性能和查找性能。
保证元素唯一性的方式依赖于hashCode()方法equals()方法。如果该元素的hashCode值相同,那么才会判断equals是否为true。如果元素的hashCode值不同,则不会调用equals。
3、TreeSet集合
TreeSet集合也是Set接口的一个实现类,它的底层结构是二叉树。在TreeSet集合中不允许有重复元素,同时TreeSet集合会对集合元素按照升序的顺序进行存储。当存储了大量需要进行快速检索的排序信息时,使用TreeSet集合可以很方便地对数据进行访问和检索。
TreeSet集合排序的两种方式,其为保证元素的唯一性都依赖于Comparable接口的compareTo()方法进行判断。
第一种:自然排序,compareTo()方法返回值为: -1 、0 、1,其分别表示小于、等于大于。Java的系统类都会实现compareTo()方法,因此返回的数据会按照升序的顺序进行排列,所以不需要重写compareTo()方法。
第二种:自定义重写compareTo()方法,Java系统类都需要有意义的、直观的排序,因此都实现了Comparable接口,但如果用户自定义的类是需要排序的,则需要自定义类中重写compareTo()方法,
判断TreeSet集合中是否有重复元素时根据引用数据的地址。

浙公网安备 33010602011771号