Background
懒癌晚期,无可救药,拖至周四才作此文,仅限于本人及组员回顾近期所学 :)
———————我是不对称的分割线——————————–
泛型编程(Generic programming )
为什么&我要说什么
泛型可以和C++的模板(template)相类比,即编写的代码可以被很多不同类型的对象所重用,如要用到存放char型和int型的顺序表不用写俩。 JDK1.5推出了泛型(Generics),其主要目的是建立具有类型安全的集合框架,首先介绍初步&简单的泛型介绍。
```java
package pair;
class Pair1<T> { //泛型类
private T first; //泛型变量
private T second;
public Pair1()
{
first = null;
second = null;
}
public Pair1( T first, T second)
{
this.first = first;
this.second = second;
}
public T getFirst(){
return first;
}
public T getSecond(){
return second;
}
}
class ArrayAlg
{
/**
* Gets the minimum and maximum of an array of strings
* return a pair with the min and max value, or null if the array is null or empty
*/
public static Pair1<String> minmax(String []a) { //泛型方法
if(a == null || a.length == 0)
return null;
String min = a[0];
String max = a[0];
for (int i = 1; i < a.length ; i++)
{
/**
* 在此复习compareTo方法
* 按字典顺序,第一个字符串的首字母比第二个字符串的首字母靠前就返回负值,靠后返回正值,相等返回0
*/
if(min.compareTo(a[i]) > 0)
min = a[i];
if(max.compareTo(a[i]) < 0)
max = a[i];
}
return new Pair1<String>(min, max);
}
}
public class PairTest
{
public static void main(String []args)
{
String []words = {"Mary", "had", "a", "IT","boyfriend"};
Pair1<String> mmPair1 = ArrayAlg.minmax(words); //泛型方法的调用
System.out.println("min = "+mmPair1.getFirst());
System.out.println("max = "+mmPair1.getSecond());
}
}
```
看了上面的示例应该对简单的泛型有了概念,现在介绍几个拓展
几个拓展~
简单的泛型接口
泛型类可以使用泛型接口,简单如下
interface bark<A>{ //动物叫声的泛型接口
void makevoice(A animal);
}
class simulate<A> implements bark<A>{
public void makevoice(A animal){//实现泛型接口的泛型类中要对泛型方法实例化
animal.toString();
}
}
class dog {
public String toString(){
System.out.println("汪里个汪");
return "";
}
}
class cat {
public String toString(){
System.out.println("喵里个喵");
return "";
}
}
public class example{
public static void main(String []args){
simulate <Object> model = new simulate <Object>();
dog shepherd = new dog();
cat miaoCat = new cat();
model.makevoice(miaoCat);
model.makevoice(shepherd);
}
}
常用的数据结构
常用的数据类型有链表,HashMap< K,V>散列映射,树集,树映射等等,因为已经学过数据结构课程(感谢张老师的教诲~),这里篇幅偏向散列映射和树集。
链表
创建一个节点类型为String的空表:
LinkedList<String >List = new LinkedList();
向链表末尾添加新的结点:
public boolean add(E element);
向链表指定位置添加一个新的结点
public void add(int index, E element);
删除所有结点使链表成为空表
public void clear();
删除首次出现的数据为element的元素结点
public void remove(E element);
删除指定位置的结点
public void remove(int index);
得到指定位置的数据
public E get(int index);
返回首次出现的数据为element的元素结点的位置
public int indexOf(E element);
**HashMap< K , V >泛型类
HashMap< K,V >的概念其实很简单,它用于存储“键/值”对,即实现通过关键值key寻找实际数据data。但有一个要求:两个数据项不能使用相同的键。散列表的容量会随着实际存储状况改变
未完待续emmmmmmm……..