using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace CustomizedList {
class MyList<T> where T:IComparable
{
private T[] array;
private int count=0;//表示当前添加的元素的个数 public MyList(int size)
{
if (size >= 0)
{
array = new T[size];
}
} public MyList()
{
array = new T[0];
} public int Capacity
{
get { return array.Length; }
} public int Count
{
get { return count; }
} public void Add(T item )
{
if (Count == Capacity) //判断元素个数跟列表容量大小是否一样大,如果一样大,说明数组容量不用,需要创建新的数组
{
if (Capacity == 0)
{
array = new T[4];//当数组长度为0的时候,创建一个长度为4的数组
}
else
{
var newArray = new T[Capacity*2];//当长度不为0的时候,我们创建一个长度为原来2倍的数组
Array.Copy(array,newArray,Count);//把旧数组中的元素复制到新的数组中 , 复制前count个 array-->newArray
array = newArray;
}
}
array[Count] = item;
count++;//元素个数自增
} public T GetItem(int index)
{
if (index >= 0 && index <= count - 1)
{
return array[index];
}
else
{
//Console.WriteLine("索引超出了范围");
throw new Exception("索引超出了范围");
}
} public T this[int index]
{
get//当我们通过索引器取值的时候,会调用get块
{ return GetItem(index); }
set//当我们通过索引器设置值的时候,会调用set块
{
if (index >= 0 && index <= count - 1)
{
array[index] = value;
} else {
//Console.WriteLine("索引超出了范围");
throw new Exception("索引超出了范围");
}
}
} public void Insert(int index, T item)
{
if (index >= 0 && index <= count - 1)
{
if (Count == Capacity)//容量不够 进行扩容
{
var newArray = new T[Capacity*2];
Array.Copy(array,newArray,count);
array = newArray;//newArray被GC机制回收
}
for (int i = count-1; i >=index; i--)
{
array[i + 1] = array[i];//把i位置的值放在后面,就是向后移动一个单位 }
array[index] = item;
count++;
}
else
{
throw new Exception("所以超出范围");
}
} public void RemoveAt(int index)
{
if (index >= 0 && index <= count - 1)
{
for (int i = index + 1; i < count; i++)
{
array[i - 1] = array[i];
}
count--;
}
else
{
throw new Exception("索引超出范围");
}
} public int IndexOf(T item)
{
for (int i = 0; i < count; i++)
{
if (array[i].Equals(item))
{
return i;
}
}
return -1;
} public int LastIndexOf(T item)
{
for (int i = Count-1; i >=0; i--) {
if (array[i].Equals(item)) {
return i;
}
}
return -1;
} public void Sort()
{
for (int j = 0; j < Count-1; j++)
{
for (int i = 0; i < Count - 1 - j; i++) {
if (array[i].CompareTo(array[i + 1]) > 0) {
T temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
}
}
} }
} //测试
class Program {
static void Main(string[] args) { MyList<int> mylist = new MyList<int>();
mylist.Add(234);
mylist.Add(14);
mylist.Add(24);
mylist.Add(24);
mylist.Add(90);
mylist.Add(274);
//mylist[index]
mylist.Insert(1,2);
//mylist.RemoveAt(-1);
mylist[0] = 100;//通过索引器 设置值
for (int i = 0; i < mylist.Count; i++)
{
//Console.WriteLine(mylist.GetItem(i));
Console.WriteLine(mylist[i]);//通过索引器 取值
}
Console.WriteLine(mylist.IndexOf(24));
Console.WriteLine(mylist.LastIndexOf(24));
mylist.Sort();
Console.WriteLine();
for (int i = 0; i < mylist.Count; i++) {
//Console.WriteLine(mylist.GetItem(i));
Console.WriteLine(mylist[i]);//通过索引器 取值
}
Console.ReadKey();
}
}
}

C#实现自定义列表的更多相关文章

  1. SharePoint 2013开发入门探索(一)- 自定义列表

    在SharePoint 2013中创建自定义列表的方式有很多,在网站内容页面添加应用程序就可以创建(站点内容-〉 您的应用程序),也可以通过SharePoint Designer 2013创建,而本文 ...

  2. [安卓] 16、ListView和GridView结合显示单元实现自定义列表显示效果

    List在各种手机应用中都有体现,是安卓UI设计的必修课. 本文将介绍在开发中如何利用ListView和GridView设计自定义列表. 下面分别是用ListView和GridView做的效果: 上面 ...

  3. 自定义列表dl的使用原因和场合

    为什么要使用自定义列表? dl和ol, ul的区别? 要正确理解dl的意图, 理解 dl的 "语义" ! 才能知道为什么要使用dl, 以及在什么时候/ 什么情况下使用 dl? dl ...

  4. 每日学习心得:SharePoint 2013 自定义列表项添加Callout菜单项、文档关注、SharePoint服务端对象模型查询

    前言: 前一段时间一直都比较忙,没有什么时间进行总结,刚好节前项目上线,同时趁着放假可以好好的对之前遇到的一些问题进行总结.主要内容有使用SharePoint服务端对象模型进行查询.为SharePoi ...

  5. 我教女朋友学编程html系列(7)—Html无序列表、自定义列表、有序列表及常用例子

    昨天写的那篇文章<我教女朋友学编程Html系列(6)—Html常用表单控件>,基本上有1000人左右看了,那边文章是我站在前人的肩膀上修改来的,添加了截图和说明,合并了例子,使之更容易被初 ...

  6. sharepoint2010 创建自定义列表

    转:http://boke.25k5.com/kan77298.html 如何创建自定义列表 首先了解创建自定义列表中涉及到的几个名词:栏.内容类型. ①栏:栏即列.字段(Field),MSDN中给出 ...

  7. Swift基础--使用TableViewController自定义列表

    首先建立一个swift项目,把storyboard的内容删掉,添加一个 Navigation Controller,然后设置storyboard对应界面的class,在Navigation Contr ...

  8. sharepoint 2010 使用自定义列表模版创建列表(2)

    前面用的方法是通过界面上操作,根据自定义模版,创建的列表.sharepoint 2010 使用自定义列表模版创建列表(1) 这里顺便记录多另一种方法,通过程序来创建. ---------------- ...

  9. 帝国cms7.2自定义列表建立tag效果 代码 教程

    统计记录:(如:select count(*) as total from phome_ecms_news where classid=1 and checked=1) 注:这句SQL的意思是查找统计 ...

  10. sharepoint 2010 在自定义列表的字段上增加功能菜单

    sharepoint 2010 在自定义列表的字段上增加功能菜单方法 打开sharepoint designer 2010,找到需要修改的视图页面,例如allitem.aspx,编辑这个页面,点击高级 ...

随机推荐

  1. vs code中Vue代码格式化的问题

    个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教! VSCode自从更新之后,vue文件的html代码格式化就失效了,而且vu ...

  2. Hyperf基础教程

    前提说明 本教程适用于新手.老手,也适用于任何操作系统,包括Windows.linux.MacOS 介绍 Hyperf 是基于 Swoole 4.4+ 实现的高性能.高灵活性的 PHP 协程框架,内置 ...

  3. #Week7 Neural Networks : Learning

    一.Cost Function and Backpropagation 神经网络的损失函数: \[J(\Theta) = - \frac{1}{m} \sum_{i=1}^m \sum_{k=1}^K ...

  4. ELK+kafka日志收集分析系统

    环境: 服务器IP 软件 版本 192.168.0.156 zookeeper+kafka zk:3.4.14  kafka:2.11-2.2.0 192.168.0.42 zookeeper+kaf ...

  5. golang之array

    golang使用array表示固定大小的数组,使用slice表示动态数组. package main import "fmt" func main() { var a = [5]i ...

  6. 怎么成为一名WEB前端开发工程师

       对于刚开始学的人来说,web 就是HTML+CSS+JavaScript其实我们是可以这样理解的.web工程师负责或参与Web产品的页面开发,包含PC端.移动APP内嵌移动端.微信小程序.web ...

  7. 【Hadoop离线基础总结】数据仓库和hive的基本概念

    数据仓库和Hive的基本概念 数据仓库 概述 数据仓库英文全称为 Data Warehouse,一般简称为DW.主要目的是构建面向分析的集成化数据环境,主要职责是对仓库中的数据进行分析,支持我们做决策 ...

  8. scala 中 Any、AnyRef、Object、AnyVal 关系

    Any,是 scala 中的抽象类,不能实例化 AnyRef 继承于 Any,它是一个 trait AnyVal 继承于 Any,它是一个抽象类,目的是消除基本类型,scala中只有引用类型,仅此作用 ...

  9. [hihoCoder1231 2015BeijingOnline]求圆与多边形公共部分的周长

    题意:如题 思路:离散.将所有交点求出来,相当于将多变形的边切成了很多条元边,对每条元边,有两种情况 在圆内,答案加上此边长 在圆外,答案加上此边相对于圆心的"有向转弧" #inc ...

  10. Azure AD(二)调用受Microsoft 标识平台保护的 ASP.NET Core Web API 下

    一,引言 上一节讲到如何在我们的项目中集成Azure AD 保护我们的API资源,以及在项目中集成Swagger,并且如何把Swagger作为一个客户端进行认证和授权去访问我们的WebApi资源的?本 ...