最简单最容易理解的手写LIst集合类
Posted yonim
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最简单最容易理解的手写LIst集合类相关的知识,希望对你有一定的参考价值。
说道集合,不得不说一下容器,数组也是集合的一种,那集合和容器的区别是什么呢?
个人认为,数组就是固定死的,而集合则是可以自增。
话不多说,直接上代码
首先是我们的接口层
package com.util.collection; public interface ListCollection { // 添加元素 void add(Object obj); // 获取集合容量 int size(); // 根据下标取元素 Object get(int i); // 根据下标删除元素 void rem(int i); // 根据元素删除 void rem(Object obj); // 实际用到的值 int actual(); }
实现层
package com.util.collection; public class ListDemo implements ListCollection{ // 初始值 private Object[] obj = new Object[10]; // 旧值 更新值 private Object[] objects; // 初始化一下、赋值、替换 private void setObj(Object[] obj) { objects = new Object[(int) Math.ceil(obj.length*1.5)]; for (int i = 0; i < obj.length; i++) { objects[i] = obj[i]; } this.obj = objects; } @Override public void add(Object obj) { if (actual() == size()) { setObj(this.obj); this.obj[actual()] = obj; }else { this.obj[actual()] = obj; } } @Override public int size() { return obj.length; } @Override public Object get(int i) { return this.obj[i]; } // 删除时需要进行遍历 @Override public void rem(int i) { this.obj[i] = null; if(i!=size()-1 && i>size()-1) { for (int j = i; j < obj.length-1; j++) { obj[j] = obj[j+1]; } } } @Override public void rem(Object obj) { if(obj!=null) { for (int i = 0; i < this.obj.length; i++) { if(this.obj[i] == obj) { rem(i); } } } } // 获取实际数组值 public int actual() { int size = 0; for (int i=0;i<obj.length;i++) { if(obj[i] != null) size++; } return size; } }
测试类
package com.util.collection; public class TestList { public static void main(String[] args) { ListCollection list = new ListDemo(); list.add("123"); list.add("456"); list.add("789"); list.add("147"); list.add("258"); list.add("369"); list.add("159"); list.add("357"); System.err.println("集合容量:"+list.size()); System.err.println("集合使用容量:"+list.actual()); for (int i = 0; i < 20; i++) { list.add(i); } System.err.println("集合容量:"+list.size()); System.err.println("集合使用容量:"+list.actual()); System.err.println("======================="); System.err.println("下标第一个:"+list.get(0)); list.set(0,"替换后的值"); System.err.println("修改之后的值是:" + list.get(0)); list.rem(0); System.err.println("删除后读取的第一个值:"+list.get(0)); System.err.println(); } }
测试输出:
集合容量:10
集合使用容量:8
集合容量:35
集合使用容量:28
=======================
下标第一个:123
修改之后的值是:替换后的值
删除后读取的第一个值:456
以上是关于最简单最容易理解的手写LIst集合类的主要内容,如果未能解决你的问题,请参考以下文章
自己手写调度器,理解Python中的asyncio异步事件循环与协程
自己手写调度器,理解Python中的asyncio异步事件循环与协程
自己手写调度器,理解Python中的asyncio异步事件循环与协程