自写超级数组

  1 package com.lovo;
  2
  3 import java.util.Arrays;
  4
  5 /**
  6  * 超级数组
  7  *
  8  * @author Administrator
  9  *
 10  * @param <T>泛型参数
 11  */
 12 public class SuperArray<T> {
 13     private T[] array;
 14     private int size;
 15
 16     /**
 17      * 超级数组的构造器
 18      */
 19     public SuperArray() {
 20         this(8);
 21     }
 22
 23     /**
 24      * 超级数组的构造器
 25      *
 26      * @param a指定容器的初始容量
 27      */
 28     @SuppressWarnings("unchecked")
 29     public SuperArray(int capacity) {
 30         array = (T[]) new Object[capacity];
 31     }
 32
 33     /**
 34      * 添加元素
 35      *
 36      * @param s指T型元素
 37      */
 38     public void add(T s) {
 39         if (size == array.length) {
 40             array = Arrays.copyOf(array, array.length != 0 ? array.length * 2
 41                     : 1);
 42         }
 43         array[size++] = s;
 44     }
 45
 46     /**
 47      * 删除元素
 48      *
 49      * @param s指T型元素
 50      */
 51     public void remove(T s) {
 52         for (int i = 0; i < size; ++i) {
 53             if (array[i] == s) {
 54                 for (int j = i; j < size; ++j) {
 55                     array[j] = array[j + 1];
 56                 }
 57                 --size;
 58             }
 59         }
 60     }
 61
 62     /**
 63      * 根据下标删除元素
 64      *
 65      * @param s指T型元素
 66      */
 67     public void removeAt(int index) {
 68         if (index < 0 || index > size) {
 69             throw new IndexOutOfBoundsException("数组下标越界" + index);
 70         }
 71         for (int i = 0; i < size; ++i) {
 72             if (i == index) {
 73                 for (int j = i; j < size; ++j) {
 74                     array[j] = array[j + 1];
 75                 }
 76                 --size;
 77             }
 78         }
 79
 80     }
 81
 82     /**
 83      * 清空超级数组
 84      */
 85     public void clear() {
 86         for (int i = 0; i < size; ++i) {
 87             array[i] = null;
 88         }
 89         size = 0;
 90     }
 91
 92     /**
 93      * 判断超级数组是否为空
 94      *
 95      * @return 超级数组为空返回true,否则false
 96      */
 97     public boolean isEmpty() {
 98
 99         return size == 0;
100     }
101
102     /**
103      * 查找元素
104      *
105      * @param index查找元素坐在的下标
106      * @return T型元素
107      */
108     public T getT(int index) {
109         if (index < 0 || index > size) {
110             throw new IndexOutOfBoundsException("数组下标越界" + index);
111         }
112         return array[index];
113     }
114
115     /**
116      * 获得超级数组的容量
117      *
118      * @return 容量大小
119      */
120     public int getCapacity() {
121         return array.length;
122     }
123
124     /**
125      * 获得超级数组中元素的个数
126      *
127      * @return T型元素的个数
128      */
129     public int getSize() {
130         return this.size;
131     }
132
133 }

测试代码

 1 package com.lovo;
 2
 3
 4 public class Test02 {
 5     public static void main(String[] args) {
 6         SuperArray<String> x = new SuperArray<String>(1);
 7         x.add("卡萨丁");
 8         x.add("苹果");
 9         x.add("djk");
10         x.add("宋德福");
11         x.add("水电费");
12         for (int i = 0; i < x.getSize(); i++) {
13             System.out.print(x.getT(i) + " ");
14         }
15         System.out.println();
16
17         System.out.println(x.getSize());
18         System.out.println(x.getCapacity());
19         System.out.println();
20
21         x.remove("Banana");
22         x.remove("收到");
23         System.out.println(x.getSize());
24
25         x.clear();
26         System.out.println(x.getSize());
27         System.out.println(x.getCapacity());
28
29         try {
30             x.removeAt(100);
31         } catch (Exception e) {
32             System.out.println(e.getMessage());
33         }
34
35     }
36 }
时间: 2024-08-27 21:59:06

自写超级数组的相关文章

COGS 723. [SDOI2007] 超级数组

★★☆   输入文件:arr.in   输出文件:arr.out   简单对比 时间限制:1 s   内存限制:3 MB  Source: SDOI2007 Day2[问题描述] 一般的数组大家都经常使用,相信很多同学没有见过下面的超级数组. 超级数组存储的是一些正整数,它还支持下面的两个操作 (1).插入一个元素,命令是 "i key" . key 是要插入的数. (2).输出第 k 大元素并删除该元素,命令是 "d k".输出第 k 大元素并删除它. “第 k

8/2 multi4 E找规律+模拟,空间开小了然后一直WA。。。J爆搜check不严谨WA。。。multi3 G凸包判共线写错数组名???样例太好过.想哭jpg。

multi4 Problem E. Matrix from Arrays 题意:构造一个数组,求子矩阵前缀和. 思路:打表找规律,"发现"L为奇数时循环节为L,为偶数时循环节为2L,求相应循环节的二维前缀和然后加加减减计算一下就好. 虚伪地证明一下循环节:L为奇数时对于第x行/列开始的位置有(x  +  x+L-1)*L/2   ->     (2x+L-1)/2(为整数)*L,因此扫过L行/列也就扫过了L整数倍"(2x+L-1)/2"倍的A[0]~A[L],

vue : 在vuex里写一个数组首尾元素互换的方法

不着急上代码,先想几个问题. vuex里怎么写方法? mutation里写vuex方法,组件中用commit调用. 数组首尾元素怎么互换? arr.splice(0, 0, arr[arr.length - 1]) arr.pop() 怎样让这个方法是可复用的? 组件中commit的时候提交想改的数组名字,并在vuex方法中进行检测. 需要检测啥? 1 state中是否存在这个变量 2 这个变量是不是一个符合要求(length > 1)的数组? 怎样检测是否存在这个变量? Object.keys

C++面向对象的学习:写一个数组类

凰00盟3NDT73澄F概http://www.zcool.com.cn/collection/ZMTgxNzIzMjg=.html O00W51槐AQ毓攀7柿http://www.zcool.com.cn/collection/ZMTgxNzI0NTY=.html 鄙3C虾Q莱烙艺橙俗OEUhttp://www.zcool.com.cn/collection/ZMTgxNzI0OTY=.html ZL2OWM乖3舅ZP坝裙http://www.zcool.com.cn/collection/Z

哈哈哈,自己写的数组

import java.util.*;public class Demo1 {    public static void main(String[] args) {     Scanner input=new Scanner(System.in);  int[] number={1,4,2,5,6};  int n=0;  System.out.println("请输入换成40的数字");  int a=input.nextInt();  for(int i=0;i<numbe

自己写的数组排重+排序

var a = [11,2,3,4,5,7,8,4,33,2,6]; Array.prototype.sorts = function(){ var $this = this, i=1, arrays = $this.sort(function(a,b){return (a-b)>0}), len = arrays.length; if(len<2) return arrays; while(i < len){ if(arrays[i] == arrays[i-1]){ len--; a

作业:JavaScript(数组篇-poker)给我的徒弟出个题。。。记得早点写完,然后大家3人可以早点打牌了

吐槽一下:“今天实际上我左思右想,写个什么东西好呢!手上的笔转了半天....最后还是给自己留点余地!看着他们什么酒店管理系统,呼叫中心系统之类的....简直是把自己固定死了!感觉一撸到底的感觉!!!我们是程序员所以我觉得要思想灵活点HOHO...” 今天只是想写一篇关于JavaScript数组的一篇文章 以前我认为我已经完全把数组掌握了!但是去年面试的时候被问呆了!!瞬间感觉自己萌萌哒!!所以把书看完了不算会!所以这次为了让我的徒弟能够不再犯我当年的错误...哼哼!我决定让她来一次实战!!!不能

黑马程序员——Java基础工具类---Collections、Arrays、超级for循环、静态导入、方法可变参数

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- Collections 一.概述 Collections是对集合框架的一个工具类.它里边的方法都是静态的,不需要创建对象.并未封装特有数据. 在Collections工具类中大部分方法是用于对List集合进行操作的,如比较,二分查找,随机

POJ - 2406 ~SPOJ - REPEATS~POJ - 3693 后缀数组求解重复字串问题

POJ - 2406 题意: 给出一个字符串,要把它写成(x)n的形式,问n的最大值. 这题是求整个串的重复次数,不是重复最多次数的字串 这题很容易想到用KMP求最小循环节就没了,但是后缀数组也能写 后缀数组写法放在后面那一题,SPOJ - REPEATS是求子串类型,KMP就不好处理了 这里放下处理KMP的AC代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <queue> 4 #include <c