数据结构泛型之初接触

1. 设计一个泛型类 Collection,它存储 object 对象的集合(在数组中),以及该集合的当前大小,提供......等方法。

import java.util.Arrays;

/**
 * @author 小喵钓鱼
 * @date 2020-02-13 12:21
 * @veision 1.10
 */
public class Collection<E> {
    private Object[] elementData;

    // setter
    public void setElementData(Object [] obj)
    {
        this.elementData = obj;
    }

    // getter
    public Object[] getElementData() {
        return elementData;
    }

    // isEmpty
    public boolean isEmplty()
    {
        return elementData.length == 0;
    }

    // makeEmpty
    // 与 list 的clear() 方法类似,Collection 不为 null,但是元素个数为0
    public void makeEmplty()
    {
        elementData = new Object[]{};
    }

    public void insert(E obj)
    {
        int length = elementData.length;
        Object [] temp = new Object[length + 1];
        /**
         *  System..arraycopy
         *  源数组,开始位置,目标组,目标开始,目标结束位置
         */
        System.arraycopy(elementData, 0, temp, 0, length);
        // 最后一个位置 赋予
        temp[length] = obj;
        // 将 temp 又赋予回去
        elementData = temp;
    }

    public void remove(int index) {
        // 如果 index 不符合规范
        if (index < 0 || elementData == null)
            return;
        int length = elementData.length;
        // 如果 index ...
        if (length - 1 < index)
        {
            return;
        }
        Object [] temp = new Object[length - 1];
        /**
         * 思路,从 源数据的 0 开始到 index - 1 处
         * 然后 再从 elementData 的 index + 1 开始 到末尾
         */
        System.arraycopy(elementData, 0, temp, 0, index);
        System.arraycopy(elementData, index + 1, temp, index, length - index - 1);
        elementData = temp;
    }

    public void remove(E obj)
    {
        if (elementData == null || obj == null) {
            return;
        }
        int length = elementData.length;
        for (int i =0; i < length; i++) {
            if (elementData[i] != null && elementData[i] == obj)
            {
                Object [] temp = new Object[length - 1];
                System.arraycopy(elementData, 0, temp, 0, i);
                System.arraycopy(elementData, i + 1, temp, i,length - 1 - i);
                elementData = temp;
                break;
            }
        }
    }

    public boolean isPresent(E obj) {
        if (elementData == null || obj == null) {
            return false;
        }
        boolean flag = false;

        for (int i = 0; i < elementData.length; i++)
        {
            if (null != elementData[i] && obj == elementData[i])
            {
                flag = true;
                break;
            }
        }

        return flag;

    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int i = 0;
        Collection<String> collection = new Collection<String>();
        Object[] objects = new Object[]{"1"};
        collection.setElementData(objects);
        collection.insert("2");
        collection.insert("4");
        System.out.println(Arrays.toString(collection.getElementData()));
        collection.remove(0);
        System.out.println(Arrays.toString(collection.getElementData()));
        boolean flag = collection.isEmplty();
        System.out.println("isEmpty: " + flag);
        collection.makeEmplty();
        boolean flag2 = collection.isEmplty();
        System.out.println("isEmpty: " + flag2);
    }
}

2. 设计一个泛型类 OrderCollection,它存储 Comparable的对象的集合(在数组中).....

/**
 * @author 小喵钓鱼
 * @date 2020-02-13 13:30
 * @veision 1.10
 */
public class OrderedCollection<E> {
    private Comparable[] elementData;

    public Comparable[] getElementData() {
        return elementData;
    }

    public void setElementData(Comparable[] elementData) {
        this.elementData = elementData;
    }

    public boolean isEmpty()
    {
        return elementData.length == 0;
    }

    public void makeEmpty()
    {
        elementData = new Comparable[]{};
    }

    public void insert(Comparable c)
    {
        int length = elementData.length;
        Comparable[] temp = new Comparable[length + 1];

        System.arraycopy(elementData, 0, temp, 0, length);
        temp[length] = c;
        elementData = temp;
    }

    public Comparable<E> findMin()
    {
        if (elementData == null)
            return null;

        int length = elementData.length;
        Comparable min = elementData[0];
        for (int i = 0; i < length; i++)
        {
            if (min.compareTo(elementData[i]) < 0)
            {
                min = elementData[i];
            }
        }
        return min;
    }

    public Comparable<E> findMax()
    {
        if (elementData == null)
            return null;

        int length = elementData.length;
        Comparable max = elementData[0];
        for (int i = 0; i < length; i++)
        {
            if (max.compareTo(elementData[i]) > 0)
            {
                max = elementData[i];
            }
        }
        return max;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        OrderedCollection<String> orderedCollection = new OrderedCollection<String>();
        Comparable[] comparables = new Comparable[]{"abc"};
        orderedCollection.setElementData(comparables);
        orderedCollection.insert("acc");
        orderedCollection.insert("bcc");
        orderedCollection.insert("dcc");
        orderedCollection.insert("aaa");
        Comparable min = orderedCollection.findMin();
        System.out.println("Min: " + min);
        Comparable max = orderedCollection.findMax();
        System.out.println("Max: " + max);
    }
}

原文地址:https://www.cnblogs.com/xmdykf/p/12303463.html

时间: 2024-10-02 12:25:40

数据结构泛型之初接触的相关文章

数据结构线性表初接触1:线性表的顺序存储结构下基本运算的实现

刚刚接触数据结构这学问,通过听课看书后自行练习了用C语言实现线性表的基本运算,其中有许多点值得注意.这里存储各个功能分块的代码,以便自身的理解及以后的复习: 1 typedef int ElemType; 2 #define MaxSize 50 3 typedef struct { 4 ElemType data[MaxSize]; 5 int length; 6 }SqList; 7 void CreateList(SqList *&L,ElemType a[],int n){ 8 int

【瞎折腾系列】mysql存储过程初接触

开始[瞎折腾系列],这个系列纯属瞎折腾,可能没有什么实际意义. mysql存储过程生成表: 新建一张user表,包含id, username , password , usertable字段. 然后创建存储过程: create PROCEDURE create_table() BEGIN DECLARE n int DEFAULT 0; DECLARE t_error INTEGER DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET

cglib初接触

直接上代码吧. pom添加依赖: <dependencies> <dependency> <groupId>cglib</groupId> <artifactId>cglib-nodep</artifactId> <version>3.1</version> </dependency> <dependency> <groupId>org.ow2.asm</groupId

linux的初接触

最初衷:当自己的才能不能支配起内心的梦想时,便需要静下心来读读书.知道linux算一个巧合,但既然选择,那便努力一把.这是我的第一篇博文,也是我正式接触linux的所学.愿与大家共勉. ---Aolens 一,Linux比较常见的几个版本以及他们包含的常见的分支: 1,  Debian:ubuntu 2,  Slackware:s.u.S.E 3,  Redhat:CentOS,Fedora,HREL(centos的社区版,由centos调试一些软件是否成功来添加到HREL中         )

MyBatis初接触

参考MyBatis官方文档. 基本开发步骤: 一.导包,mybatis-3.2.7.jar: 二.编写实体类Customer.java(与数据库表对应): 三.编写实体类对应的mapper接口CustomerMapper.java(定义实体类的操作): 四.编写实体类对应的mapper,Customer.xml(接口中的方法名与mapper中的操作的id名要一致): 五.编写mybatis-config.xml: 六.在mybatis-config.xml中注册mapper: 七.从xml获取S

jfinal初接触,一个简单的文件上传例子

写了个上传的小例子. 从jfinal官网下载jfinal-1.8_demo_for_jsp.zip 然后下载jfinal-1.8-lib.zip 按要求删掉该删除的,引入一些包,之后的项目结构: DemoConfig.java中配置路由,只留下了根路径: /** * 配置路由 */ public void configRoute(Routes me) { me.add("/", CommonController.class); //me.add("/blog", B

java8 lambda表达式初接触

环境是jdk8 代码如下: package memTest; /** * Created by PC on 2014/8/5. */ public class LambdaOne { public static void test(){ new Thread(()-> System.out.print("hi") ).start(); } public static void main(String[] args) { new LambdaOne().test(); } } ja

vi初接触

它有三种模式: 一 一般模式 二 编辑模式 三 命令行模式 介绍几种比较常用的吧 -- 退出:q 写入:w 强制:! (以上可叠加) 显示行号:set nu 取消:set nonu 跳转到n行:nG 最后一行:G 第一行:gg(=1G) 向某个方向移动n个字符: 方向可以用方向键,也可以用 h(左),k(上),l(右),j(下) #向右移动5个字符 eg:5l 寻找词语:/word(向下) ?word(向下) 寻找x,y行之间的单词并替换:x,ys/word/WORD/g (加C可询问处理) #

【Centos 7】------ SaltStack 初接触

最近学习了saltstack,初接触,发现他好强大,有多强大? 说不好,我只接触了冰山一角,但已经够我喝一壶的了. 接下来,将探究saltstack的世界,能发现多少新大陆,看自己的能力啦! saltstack 介绍: Salt,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯. salt底层采用动态的连接总线,使其可以用于编配,远程执行, 配置管理等等. 一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的报