天天看点

Java基础知识(七)一、泛型(JDK5以后新特性)三、ArrayList(List集合的子实现类)四、Vector(List集合的子实现类)五、LinkedList(List集合的子实现类)六、Set集合七、LinkedHashSet集合八、TreeSet集合九、Map集合十、数组转换为固定大小的集合

一、泛型(JDK5以后新特性)

1、概述:泛型直接规定集合的存储类型,将明确的集合类型的工作推迟到了创建对象或者调用方法的时候,属于一种参数化类型,可作参数传递。

2、优点

(1)将运行时期异常提前到了编译时期;

(2)优化了设计,解决了×××警告线问题;

(3)避免了强制类型转换, ,解决了向下类型转换出现的问题ClassCastException;

(4)泛型的引出可以提供程序的安全性。

3、泛型定义在类上

(1)格式:public class 类名<T>{……}

(2)实例:

实体类:

Java基础知识(七)一、泛型(JDK5以后新特性)三、ArrayList(List集合的子实现类)四、Vector(List集合的子实现类)五、LinkedList(List集合的子实现类)六、Set集合七、LinkedHashSet集合八、TreeSet集合九、Map集合十、数组转换为固定大小的集合

测试类:

Java基础知识(七)一、泛型(JDK5以后新特性)三、ArrayList(List集合的子实现类)四、Vector(List集合的子实现类)五、LinkedList(List集合的子实现类)六、Set集合七、LinkedHashSet集合八、TreeSet集合九、Map集合十、数组转换为固定大小的集合

4、泛型定义在方法上

(1)格式:public<T> 返回值类型 方法名<T t>{……}

Java基础知识(七)一、泛型(JDK5以后新特性)三、ArrayList(List集合的子实现类)四、Vector(List集合的子实现类)五、LinkedList(List集合的子实现类)六、Set集合七、LinkedHashSet集合八、TreeSet集合九、Map集合十、数组转换为固定大小的集合
Java基础知识(七)一、泛型(JDK5以后新特性)三、ArrayList(List集合的子实现类)四、Vector(List集合的子实现类)五、LinkedList(List集合的子实现类)六、Set集合七、LinkedHashSet集合八、TreeSet集合九、Map集合十、数组转换为固定大小的集合

(3)注意:在方法上定义泛型时,若未指明类型,在主函数中可赋多种类型值。

5、泛型定义在接口上

(1)格式:

A、接口

Public Interface 接口名<T>{……}

B、子实现类:

情况一:泛型类型已确定

Public class 子实现类 implements 接口名<T>{……}

情况二:泛型类型不确定

Public class 子实现类<T> implements 接口名<T>{……}

接口:

Java基础知识(七)一、泛型(JDK5以后新特性)三、ArrayList(List集合的子实现类)四、Vector(List集合的子实现类)五、LinkedList(List集合的子实现类)六、Set集合七、LinkedHashSet集合八、TreeSet集合九、Map集合十、数组转换为固定大小的集合

子实现类:

Java基础知识(七)一、泛型(JDK5以后新特性)三、ArrayList(List集合的子实现类)四、Vector(List集合的子实现类)五、LinkedList(List集合的子实现类)六、Set集合七、LinkedHashSet集合八、TreeSet集合九、Map集合十、数组转换为固定大小的集合
Java基础知识(七)一、泛型(JDK5以后新特性)三、ArrayList(List集合的子实现类)四、Vector(List集合的子实现类)五、LinkedList(List集合的子实现类)六、Set集合七、LinkedHashSet集合八、TreeSet集合九、Map集合十、数组转换为固定大小的集合

6、泛型添加位置

(1)类/接口:定义类/接口时添加。

(2)集合:创建对象和获取迭代器时添加(创建集合对象,在泛型明确的情况下,前后必须保持一致)。

7、泛型通配符(高级)

(1)<?>:代表任意类型Object类型,或者任意Java类 。

(2)<? extends E>:向下限定,E的子类或者E本身。

(3)<? super E>:向上限定,E本身或者其父类。

(4)实例:

Java基础知识(七)一、泛型(JDK5以后新特性)三、ArrayList(List集合的子实现类)四、Vector(List集合的子实现类)五、LinkedList(List集合的子实现类)六、Set集合七、LinkedHashSet集合八、TreeSet集合九、Map集合十、数组转换为固定大小的集合
Java基础知识(七)一、泛型(JDK5以后新特性)三、ArrayList(List集合的子实现类)四、Vector(List集合的子实现类)五、LinkedList(List集合的子实现类)六、Set集合七、LinkedHashSet集合八、TreeSet集合九、Map集合十、数组转换为固定大小的集合

二、JDK5以后的新特性

1、可变参数

(1)当一个方法的参数个数不确定的时候,使用可变参数。

(2)格式:修饰符 返回值类型 方法名(数据类型...变量名){......}

(3)注意:a、变量名看作数组;b、数据类型…(数据类型后必须是三个“.”)。

Java基础知识(七)一、泛型(JDK5以后新特性)三、ArrayList(List集合的子实现类)四、Vector(List集合的子实现类)五、LinkedList(List集合的子实现类)六、Set集合七、LinkedHashSet集合八、TreeSet集合九、Map集合十、数组转换为固定大小的集合

2、增强for循环(实际开发中常用)

(1)作用:替代迭代器,在遍历集合或者遍历数组时常用增强for循环。

(2)格式:for(数据类型 变量名 : 数组或者集合对象名){

输出变量

}

(3)弊端:如果集合的对象是null,再次对集合操作,会出现异常。

解决:对集合进行非空判断。

例如:遍历存储String类型数据的集合list:

if(list !=null) {

for(String s:list) {

System.out.println(s);

3、静态导入

(1)特点:

A、前提:导入的方法必须为静态。

B、导入到一个方法的级别。

(2)格式:import static 包名.类名.方法名;

(3)方式:

A、导包,调用方法时直接写方法名。

B、不导包,调用方法时直接加前缀。

三、ArrayList(List集合的子实现类)

1、概述:ArrayList是List接口中常用的子实现类。

2、底层:数组实现,查询快,增删慢。线程不安全,不同步,执行效率高。

3、遍历功能

(1)Iterator iterator()方式。

(2)size()和get(int index)结合,普通for循环。

(3)增强for循环(实际开发中常用)。

(4)ListIterator listIterator()方式。

四、Vector(List集合的子实现类)

1、底层:是一种可增长对象数组实现,查询快,增删慢,线程安全,同步,执行效率高。

2、特有功能

(1)public void addElement(Object obj)添加元素。

(2)public Enumeration elements()返回此向量的枚举,相当于public Iterator iterator()。

(3)boolean hasMoreElements()判断是否有可遍历的元素。

(4)Object nextElement()遍历下一个元素。

五、LinkedList(List集合的子实现类)

1、底层:链表实现,查询慢,增删快。线程不安全的,不同步,执行效率高。

(1)添加功能

A、addFirst(Object e):将指定的元素插入到列表的开头

B、addLast(object e):将指定的元素添加到列表末尾

(2)获取功能

A、getFirst():获取列表第一个元素

B、getLast():获取列表第二个元素

(3)删除功能

A、public Object removeFirst()移除并返回此列表的第一个元素。

B、public Object removeLast()移除并返回此列表的最后一个元素。

3、实例:

Java基础知识(七)一、泛型(JDK5以后新特性)三、ArrayList(List集合的子实现类)四、Vector(List集合的子实现类)五、LinkedList(List集合的子实现类)六、Set集合七、LinkedHashSet集合八、TreeSet集合九、Map集合十、数组转换为固定大小的集合

六、Set集合

1、Set集合和List集合的区别

(1)Set集合:不允许元素重,且元素唯一,不能保证迭代的顺序恒久不变(底层哈希表和hascode),无序(存储和取出不一致),元素可以为null。

(2)List集合:允许元素重复,有序(存储和取出一致)。

2、Set集合创建对象(用子实现类HashSet):Set<数据类型> set = new HashSet<数据类型>();

3、Set集合元素唯一性和无序性原因

(1)唯一性:HashSet的add()方法底层依赖于双列集合HashMap,它依赖于两个方法,HashCode()方法和equals()方法。

(2)无序性:底层的哈希表和hashcode()方法。

4、自定义类中用Set集合

自定义类中用Set集合,无法保证元素唯一性。若要在自定义类中保证元素唯一性,需在自定义类中重写HashCode()方法和equals()方法。

七、LinkedHashSet集合

1、概述:具有可预知迭代顺序,元素唯一、有序,底层由链接列表与哈希表组成。

2、LinkedHashSet集合创建对象:

LinkedHashSet<数据类型> 对象名=new LinkedHashSet<数据类型>。

3、元素唯一有序原因

(1)保证元素唯一性:由哈希表决定(HashCode()方法和equals()方法)。

(2)保证元素有序性:由链表决定。

八、TreeSet集合

1、概述:TreeSet集合元素唯一,有序,默认情况下是通过自然顺序对集合中的元素排序。

2、TreeSet集合创建对象:TreeSet<数据类型> 对象名=new TreeSet<数据类型>();(默认)。

3、TreeSet集合添加元素存储方式

TreeSet集合依赖于TreeMap结构实现,红黑树结构(自平衡的二叉树结构)。

(1)将存储的第一个节点作为根节点;

(2)后面的每一个元素添加进来时,均与已存储的根节点作比较:

A、大于根节点,作为右孩子;

B、小于根节点,作为左孩子;

C、如果已经存在,忽略该元素,不存储。

上述方式保证了元素唯一有序。

4、取出元素:底层进行前序遍历或中序遍历或后序遍历。

5、TreeSet集合构造方法不同,使用的排序也不同

(1)无参构造:使用自然排序。自定义类需要实现Comparable接口,并需要在自定义类中重写该接口中的compareTo()方法。创建对象:TreeSet<类名> 对象名=new TreeSet<类名>();(默认情况)。

(2)有参构造:使用比较器排序。两种实现方式:

A、自定义类需要实现Comparator接口,并需要在自定义类中重写该接口中的compare()方法。创建对象:TreeSet<类名> 对象名=new TreeSet<类名>(new Comparator());

B、在主函数中用接口匿名内部类的方式实现,直接在主函数中实现Comparator接口,重写compare方法。创建对象:TreeSet<类名> 对象名=new TreeSet<类名>(new Comparator<类名>());

6、自定义类中用TreeSet集合实现自然排序:

自定义类需要实现Comparable接口,并在自定义类中重写该接口中的compareTo()方法,重写该方法时,需要在方法中写排序条件。

自定义类格式:

public class 类名 implements Comparable<类名> {

……

public 返回值类型 comparaTo(类名 对象名){

排序条件;

九、Map集合

十、数组转换为固定大小的集合

继续阅读