Java (3)之泛型编程

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());
    }
}
```

eclipse执行结果

看了上面的示例应该对简单的泛型有了概念,现在介绍几个拓展

几个拓展~

简单的泛型接口

泛型类可以使用泛型接口,简单如下

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);
    }
 }

Eclipse运行结果

常用的数据结构

常用的数据类型有链表,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……..

Rescue Simulation 配置 agent 的一些笔记

接口回调技术的概念理解和应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值