泛型

lua学习之迭代器与泛型for第一篇

萝らか妹 提交于 2020-02-29 00:25:58
迭代器与泛型 for 1 迭代器与 closure 「迭代器」是一种可以遍历一种集合中的所有元素的机制 在 lua 中通常将迭代器表示为 函数 每调用一次函数,即返回集合中的「下一个」元素 每个迭代器都需要在每次成功调用之间保存一些 状态 这样就知道 它现在所在的位置 以及 如何步进到一下位置 一个 closure 就是一种可以访问 其外部嵌套环境中的局部变量 的函数 这些变量可用于在成功调用之间保持状态值 从而使 closure 可以记住它在一次遍历中所在的位置 创建一个 closure 必须创建它的「非局部变量」 一个 closure 结构通常包含两个函数 closure 本身 创建该 closure 的工厂函数 while values 就是工厂,每次调用这个工厂,就会创建一个新的 closure 即迭代器其本身 这个 closure 将它的想要保存在其外部变量 t 和 i 中 每当调用这个迭代器时,它就从列表 t 中返回下一个值 直到最后一个元素返回后,迭代器会返回 nil ,表示迭代的结束 function values(t) local i = 0 return function () i = i + 1 return t[i] end end t = {123, 333, 444} iter = values(t) -- 创建迭代器 while true do

使用Java泛型实现快速排序(快排,Quicksort)算法

巧了我就是萌 提交于 2020-02-28 21:54:53
快排算法的特点 实用性强。 很多实际的项目中使用了快排算法。但通常对算法都进行了调整(tuning),比如Java.util.Arrays类中的sort函数就使用了快排算法,但使用了双参考值( Dual-Pivot Quicksort )等一些改进措施。由于快排算法为递归算法,可以用循环代替递归函数调用,改进性能。 不需要额外的空间。 可以将数组中的数据直接交换位置实现排序,所以理论上不需要额外的空间。 时间复杂度 平均情况:O(nlgn) 最坏情况: O(n*n),发生在当数据已经是排序状态时 快排算法的基本原理 1、从数据中选取一个值a[i]作为参考 2、以a[i] 为参考,将数据分成2部分:P1、P2,P1中的数据全部≤a[i],P2中的数据全部>a[i],数据变为{{P1}{a[i]}{P2}} 3、将P1、P2重复上述步骤,直到各部分中只剩1个数据 4、数据完成升序排列 示例: 原始数据: {3,9,8,5,2,1,6} 第1步:选取第1个数据:3 第2步:将数据分成2部分,左边≤3,右边大于>3: {2,1} {3} {9,8,5,6} 第3步:将各部分重复以上步骤,直到每部分只剩1个数据: {2,1} => {1} {2} {9,8,5,6} => {8,5,6} {9}=> {5,6} {8} {9}=> {5} {6} {8} {9} 第4步:数据完成升序排列:

泛型单链表

放肆的年华 提交于 2020-02-28 14:22:14
泛型单链表 单链表将每个数据分为节点,每个节点存储数据和指向下一个节点的指针。这样数据就不用在内存中使用连续的存储空间,有更大的灵活性。 这里将单链表分为节点类(Node)和链表类(singleLinkedList),由于链表类需要访问到Node类的数据,因此将Node类的数据声明为 public ,也可以将链表类声明为节点类的友元类。 抽向数据类型(ADT) :(linearList.h) /************************************************************************* > File Name : linearList.h > Author : Harold > Mail : 2106562095@qq.com > Github : www.github.com/Haroldcc > Created Time : 2020年02月26日 11时02分58秒 ************************************************************************/ /***** 线性表的抽象定义 *****/ # ifndef LINEARLIST_H # define LINEARLIST_H # include <iostream> template < typename

Collection,泛型,Map

最后都变了- 提交于 2020-02-28 10:56:45
1.Collection集合 集合和数组的区别? 数组的长度是固定的, 集合的长度是可变的 数组中存储的数据都是同一类型的数据。集合存储的是对象,而且对象的类型可以不一致 集合框架 单列集合 java.util.Collection Collection:单列集合的跟接口,用于存储一系列的规则的元素 两个子接口: java.util.List: List中元素是有序,元素可重复 实现类:java.util.ArrayList, java.util.LinkedList Java.util.Set: Set中元素无序,不重复 实现类:java.util.HashSet, java.util.TreeSet Collection集合的常用功能 Collection是所有单列集合的父接口,因此定义了一些通过方法 public boolean add(E, e) :添加元素到集合中 public void clear() :清空集合中所有的元素 public boolean remove(E, e) :删除指定的元素 public boolean contains(E, e) :判断当前集合是否存在给定的元素 public boolean isEmpty() :判断当前集合是否为空 public int size() :返回集合中元素的个数 public Object[] toArray(

Java泛型简单的使用

非 Y 不嫁゛ 提交于 2020-02-27 03:04:05
前言 Java里面的泛型在实际开发中运用的很多,学过C++的同学一定知道C++的模板,而Java中的泛型,一定程度上和它还是挺像的。 相信写Java的人,大都有用过List的实现类ArrayList。在Java没有泛型之前,它的内部是一个Object的数组实现的。这也导致一个问题,每次使用里面的元素的时候需要向下转型,而且很明显,如果是Object的话,意味着我们可以丢任何对象进去。自动转型成Object,这样在使用的时候就很容易出问题,不知道里面存的是什么。如: ArrayList list = new ArrayList ( ) ; list . add ( "string1" ) ; list . add ( "string2" ) ; String str = ( String ) list . get ( 0 ) ; list . add ( new File ( "test.txt" ) ) ; 然而使用泛型容易,我们就经常使用List的泛型,但是如果我们要写一个泛型的类其实并不那么容易。 最简单的泛型 package io . ilss . advanced . generic ; /** * className MyObject * description MyObject * * @author feng * @version 1.0 * @date 2019

C#委托的介绍(delegate、Action、Func、predicate)

ε祈祈猫儿з 提交于 2020-02-26 23:04:15
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。   1.委托的声明   (1). delegate delegate我们常用到的一种声明    Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型。    例:public delegate int MethodtDelegate(int x, int y);表示有两个参数,并返回int型。   (2). Action Action是无返回值的泛型委托。    Action 表示无参,无返回值的委托    Action<int,string> 表示有传入参数int,string无返回值的委托   Action<int,string,bool> 表示有传入参数int,string,bool无返回值的委托 Action<int,int,int,int> 表示有传入4个int型参数,无返回值的委托    Action至少0个参数,至多16个参数,无返回值。    例: public void Test<T>(Action<T> action,T p) { action(p); }   (3). Func    Func是有返回值的泛型委托    Func<int> 表示无参,返回值为int的委托    Func<object,string,int>

关于Java泛型的理解

丶灬走出姿态 提交于 2020-02-26 16:03:20
/* * 项目名称:定义一个泛型数组类,并创建数组类的对象 * 类名称:理解泛型 * 类描述: * 创建人:柯盛 * 创建时间:2019年8月6日 下午10:46:08 * @version * @其他: */ /*泛型是通用类型的类,泛型对象可以表示多种不同的类的对象;采用泛型类,就可以将行为(封装方式)相同,但属性的类型(数据类型)不同的多个类用一个泛型类表示*/ class GenericArray<T> //定义泛型类,类型参数名T; { int n; //数组的总长度 int total; //数组的实际长度 private Object arr[]; public GenericArray(int n) { this.n = n; total = 0; arr = new Object[n]; } public void add(T obj) //将一个T型对象加入到数组中 { arr[total++] = obj; } public T indexOf(int i) //获得第i个元素,返回值类型是T型 { return (T)arr[i]; //返回前强制转换成T型 } public int length() { return total; } } public class 理解泛型 { public static void main(String args[])

数据结构的基本概念

喜夏-厌秋 提交于 2020-02-26 08:15:27
数据结构 一、线性表 1. 顺序存储结构(顺序表) 一个线性表是n个具有相同特性的数据元素的有限序列。数据元素是一个抽象的符号,其具体含义在不同情况下不同。 2. 链表 链表里面节点的地址不是连续的,而是通过指针进行链接的。 二、哈希表 1. 哈希的导入 数组的特点是:寻址容易,插入和删除困难; 链表的特点是:寻址困难,插入和删除容易。 那么,我们综合两者的特性,做出一种寻址容易,插入和删除也容易的数据结构,这就是哈希表。 下面是哈希表的一种实现方法:拉链法。 在图的左边是一个数组,数组的每个成员包括一个指针,指向一个链表的头,根据元素的特征将元素分配到不同的链表中去,我们也是根据这些特征,找到正确的链表,再从链表中找到正确的元素。 2. 哈希表 哈希表就是把Key通过一个固定的算法函数——哈希函数,转换成一个整形数字,然后就将该数字对数长度进行取余,取余结果当作数组的下标,将value存储在以该数字为下表的数组空间里。 3. 哈希表的优缺点 优点 时间少:无论哈希表中的数据量,我们在操作时的插入,删除,查询都只需要O(1)的时间级。 速度快:在日常程序中,在特定时间内哈希表的查找速度总比树快。 编程简单:相对树来讲,哈希表编程实现相对简单。 缺点 哈希表基于数组,数组创建后难以扩展,故当哈希表被基本填满时,性能下降会非常严重,所以在创立哈希表时我们必须清楚表中将要存储多少数据。

泛型

与世无争的帅哥 提交于 2020-02-26 07:59:39
为什么要使用泛型? - 一般使用在集合上 ** 比如现在把一个字符串类型的值放入到集合里面,这个时候,这个值放入到集合之后,失去本事的类型,只能是object类型, 这个时候,比如想要对这个值进行类型转换,很容易出现类型转换错误,怎么解决这个问题,可以使用泛型来解决 在集合上如何使用泛型 常用集合 list set map 泛型语法 集合 比如 List 在泛型里面写是一个对象,String 不能写基本的数据类型 比如int (****) ** 写基本的数据类型对应包装类 byte – Byte short – Short int – Integer long – Long float – Float double – Double char – Character boolean – Boolean 在list上使用泛型 list的三种实现 ArrayList linkedList Vector 代码: @Test public void testList() { List<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); //遍历list集合 有几种方式 三种 //普通for循环 迭代器 增强for //普通for循环 for(int i=0;i

C++primer-学习心得-第十章-泛型算法

一个人想着一个人 提交于 2020-02-25 23:50:33
文章目录 C++primer-学习心得-第十章-泛型算法 10.1 概述 练习10.1 练习10.2 10.2 初识泛型算法 1. 只读算法 练习10.3 2.写容器元素的算法 练习10.6 3.重排容器元素的算法 练习10.9 10.3定制操作 1.向算法传递函数 练习10.11 练习10.12 练习10.13 2.lambda表达式 练习10.14 练习10.15 练习10.17 练习10.18 练习10.19 3.lambda的捕获和返回 练习10.20 练习10.21 4.参数绑定 练习10.22 练习10.23 练习10.24 10.4 再探迭代器 1.插入迭代器 练习10.27 练习10.28 2. iostream 迭代器 练习10.29 练习10.30 练习10.31 练习10.32 练习10.33 3.反向迭代器 练习10.34 练习10.35 练习10.36 练习10.37 10.5泛型算法结构 10.6 特定容器算法 练习10.40 C++primer-学习心得-第十章-泛型算法 上个章节学习了各种顺序容器,但顺序只定义了很少的操作,我们能做的事情还很少,我们希望能做更多的事情如:查找特定元素、替换或删除一个特定值、重排元素顺序等。标准库没有给每个容器定义相关的成员函数来实现这些操作,但定义了一组泛型算法:算法:实现了一些经典算法的公共接口(如排序和搜索)