泛型与集合

一.泛型

 1.泛型介绍

泛型是Java 5引进的新特征,是类和接口的一种扩展机制,主要实现参数化类型机制。暂行被广泛应用在Java集合API中,在Java集合框架中大多数的类和接口都是泛型类型。使用泛型,程序员可以编写更安全的程序。

①泛型类型

简单的说,泛型是带一个或多个类型参数的类或接口。泛型类型的使用与方法调用类似方法调用需向方法传递参数,使用泛型需传递一个类型参数,即用某个具体的类型替代。

 

②泛型方法

泛型方法是带类型参数的方法,类的成员方法和构造方法都可以定义为泛型方法,泛型方法的定义与泛型类型的定义类似,但类型参数的作用域仅限于声明的方法和构造方法内。泛型方法可以定义为静态的和非静态的。

③通配符(?)的使用

由于String是Object的子类,但List <String>与List <Object>却没有关系,前者并不是后者的子类,要一个List <String>对象传给List <Object>需要将其参数修改为List <?>,这就是通配符(?)的使用。

④有界类型参数

有件类型分为上界和下界,上界用extens指定,下界用super指定。

⑤类型擦除

当实例化泛型类型时,编译器使用一种叫类型擦除的技术转换这些类型。在编译时,编译器将清除类和方法中所有与类行参数有关的信息。类型擦除可以让使用泛型的Java应用程序与之前不使用泛型类型的Java类库和应用程序兼容。

2.集合框架

①Collection

❶Set接口

❷List接口

❸Queue接口

②Map

SortedMap

3.List接口及实现类

List接口除继承Collection的方法外,还定义了一些自己的方法。

①ArrayList

ArrayList是最常用的线性表现类型,通过数组实现的集合对象。

②遍历集合元素

在使用集合时,遍历集合元素是最常见的任务。遍历集合中的元素有多种方法:用简单的for 循环、用增强的for循环和用Iterator迭代器对象。

❶使用简单的for循环

使用简单的for循环可以遍历集合中的每个元素。

for(int i= 0;i<bigCities.size();i++){

System.out.print(bigcities.get(i)+"");

}

❷使用增强的for 循环

使用增强的for 循环不但可以遍历数组的每个元素,还可以遍历集合中的每个元素。下面的代码打印集合的每个元素:

for (String city : bigcities)

     System.out.println(city);

❸使用迭代器

迭代器是一个可以遍历集合中每个元素的对象。调用集合对象的iterator()方法可以得到Iterator对象,再调用Iterator对象的方法就可以遍历集合中的每个元素。

④数组转化为List对象

java.util.Arrays类提供了一个asList()方法,实现将数组转换成List对象的功能,该方法的定义如下:

public static <T> List<T> asList(T…a)

该方法提供了一个从多个元素创建List 对象的途径,它的功能与Collection 接口的toArray()方法相反。

String[ ]  str= ("one","two","three","four"};

List<String> list =Arrays.asList(str);//将数组转换为列表

System.out.println(list);

4.Set接口及实现类

❶HashSet类

HashSet利用散列方法储存元素,具有良好的存取性能,但元素没有顺序。

❷用Set对象实现集合运算

❸TreeSet类

5.Queue接口及实现类

①Queue接口和Deque接口

Queue接口除了提供Collection的操作外,还提供了插入、删除和检查操作。

b6c9fa46d52546caaeb884861fbf7cde.jpg

 Deque接口还定义了removeFirstOccurence()和removeLastOccurence()方法,分别用于删除第一次出现的元素和删除最后出现的元素。

②ArrayDeque类和LinkedList类

Deque的常用实现类包括 ArrayDeque 类和LinkedList类,前者是可变数组的实现;后者是线性表的实现。LinkedList 类比 ArrayDeque类更灵活,实现了线性表的所有操作,其中可以存储null元素,但ArrayDeque 对象不能存储null。

可以使用增强的for 循环和迭代器访问Deque的元素。

ArrayDeque<String> aDeque = new ArrayDeque<String>();

for (String str : aDeque) {

System.out.println(str);

}

使用迭代器访问Deque元素代码如下:

ArrayDeque<String> aDeque = new ArrayDeque<String>();

for (Iterator<String> iter = aDeque.iterator(); iter.hasNext();){

System.out.println(iter.next());

}

③集合转换

集合实现类的构造方法一般都接受一个Collection对象,可以将Collection转化成不同类型的集合。下面是一些实现类的构造方法:

public ArrayList(Collection c)

public HashSet(Collection c)

public LinkedList(Collectionfc)

下面代码将一个Queue对象转换成一个List:

Queue<String> queue = new LinkedList<>();

queue.add("hello");

queue.add("world");

List<String> mylist = new ArrayList(queue);

以下代码又可以将一个List 对象转换成Set对象:

Set<String> set = new HashSet (myList);

6.Map接口及实现类

①Map接口

❶HasMap

❷Hastable

❸TreeMap

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值