复习数据结构,一个基本list
import java.util.Iterator;
import java.util.NoSuchElementException;
public class MyArrayList implements Iterable {
private static final int DEFAULT_CAPACITY = 10;
private int theSize;
private Object[] theItems;
public MyArrayList(){
clear();
}
public void clear() {
theSize = 0;
ensureCapacity(DEFAULT_CAPACITY);
}
public int size() {
return theSize;
}
public boolean isEmpty() {
return size() == 0;
}
public void trimToSize() {
ensureCapacity(size());
}
public Object get(int idx) {
if (idx < 0 || idx >= size()) {
throw new ArrayIndexOutOfBoundsException();
}
return theItems[idx];
}
public Object set(int idx, Object newVal) {
if (idx < 0 || idx >= size()) {
throw new ArrayIndexOutOfBoundsException();
}
Object old = theItems[idx];
theItems[idx] = newVal;
return old;
}
public void ensureCapacity(int newCapacity) {
if (newCapacity < theSize) {
return;
}
Object[] old = theItems;
theItems = (Object[]) new Object[newCapacity];
for (int i = 0; i < size(); i++) {
theItems[i] = old[i];
}
}
public boolean add(Object x) {
add(size(),x);
return true;
}
public void add(int idx,Object x) {
System.out.println("---"+theItems.length+"---"+size()+"--"+theSize+"--"+idx);
if (theItems.length == size()) {
ensureCapacity(size() * 2 + 1);
}
for(int i = theSize; i > idx;i--) {
theItems[i] = theItems[i-1];
System.out.println("===="+theItems[i-1]);
}
theItems[idx] = x;
theSize++;
}
public Object remove(int idx) {
Object removedItem = theItems[idx];
for (int i = idx; i < size() - 1 ;i++)
theItems[i] = theItems[i+1];
theSize--;
return removedItem;
}
@Override
public Iterator iterator() {
return new ArrayLIstIterator();
}
private class ArrayLIstIterator implements Iterator<Object>{
private int current = 0;
public boolean hasNext(){
return current < size();
}
public Object next() {
if(!hasNext()) {
throw new NoSuchElementException();
}
return theItems[current++];
}
public void remove() {
MyArrayList.this.remove(--current);
}
}
}
分享到:
相关推荐
在这个自定义的List实现中,我们可能包含了基本的添加元素(push)、删除元素(pop)以及赋值和加法操作。下面将详细解释这些概念和操作。 **1. 结构设计** 自定义的List通常由节点(Node)组成,每个节点包含一个...
首先,我们要理解`list`容器的基本概念。`list`由一系列的节点组成,每个节点包含一个元素和两个指针,分别指向前一个和后一个节点。这种设计使得在链表中插入或删除元素的时间复杂度为O(1),因为只需要改变相邻节点...
本教程将详细介绍如何利用MFC ListCtrl控件,响应用户的双击事件,实现用户能够编辑表格中的文本。 首先,我们需要在MFC应用程序中添加一个ListCtrl控件。这通常是在资源编辑器中完成的,例如在对话框类的资源视图...
Java 实现泛型List的源码,基本实现了List接口的全部所有方法。欢迎大家发表自己的观点和建议。
在编程领域,特别是涉及到数据操作的时候,`list` 是一种常用的数据结构,它在Python、JavaScript等语言中广泛使用。`list to list` 操作通常指的是将一个列表(list)的内容移动到另一个列表中,这可能涉及到列表的...
在本项目中,"STL的list模版实现学生管理系统"是使用C++编程语言,特别是标准模板库(STL)中的list容器来构建的一个基本的学生信息管理应用程序。STL的list是一个双向链表,提供了高效的数据插入和删除操作,非常...
下面我们将深入探讨跳表的基本原理、C++实现的关键点以及测试程序的设计。 跳表的核心思想是通过多层索引来加速查找过程。每一层索引称为一个“级别”,最底层被称为0级,而上一层则是下一层的两倍概率存在。最高...
首先,让我们了解一下ListCtrl和ListBox的基本概念。ListCtrl通常在MFC(Microsoft Foundation Classes)库中使用,它是一种具有多种视图模式(如报告、图标、小图标和详细信息)的控件,可以显示多列数据,并支持...
首先,我们需要理解List Control的基本结构。它由多个item组成,每个item又包含一项或多列数据。在MFC中,我们通常通过CListCtrl类来操作List Control。默认情况下,CListCtrl的item文本是只读的,无法直接修改。要...
本教程将详细介绍如何通过EditText和List组合来实现Spinner,这对于初学者来说是一个很好的实践项目,有助于提升对Android开发的兴趣。 首先,Spinner的基本概念:Spinner是Android提供的一个下拉列表控件,它允许...
以上就是ListCtrl实现双击编辑和在ListCtrl中绘图的基本步骤。实际应用中,可能还需要处理更多的细节,如错误检查、数据同步等。通过ListCtrl的自定义绘制,我们可以实现高度定制化的界面,为用户提供更直观的数据...
首先,我们需要理解List Control的基本结构。在MFC(Microsoft Foundation Classes)库中,List Control对应于CListCtrl类。它提供了丰富的功能,如添加、删除和修改列表项,以及设置各种视图样式(如报告视图、图标...
分页的基本思想是将一个大List分割成多个小List,每个小List代表一页数据。分页通常涉及到两个参数:当前页数(currentPage)和每页显示的条目数(pageSize)。为了实现这个功能,我们可以创建一个名为`...
本文将深入探讨两个经典数据结构——列表(List)和队列(Queue),它们都是用纯C语言实现的,并且具有简洁和通用的特点。这些源代码可以在C/C++的各种编译器上运行,为开发者提供了便利。 首先,我们来解析“list...
综上所述,"list实现的购物车"项目结合了Python的基础数据结构和web开发中的cookie技术,通过这些工具,我们可以创建一个基本的、能在用户会话间持久化的购物车系统。然而,实际的电商系统可能还需要考虑更多的细节...
首先,我们需要理解List Control的基本概念。在MFC(Microsoft Foundation Classes)库中,List Control通常是CListCtrl类的实例,它提供了一个多列、多选择的视图,用于展示数据。我们可以向List Control中添加、...
本篇将详细介绍如何在C#环境下,针对ASP.NET Web Forms应用,实现CheckBoxList控件的单选效果。 首先,我们需要理解CheckBoxList的基本结构。CheckBoxList控件是基于HTML的多选框列表,每个选项由一个CheckBox控件...
本项目是基于C语言实现的数据结构模板,包括链表(List)、队列(Queue)和栈(Stack)三种基本数据结构。这些数据结构是算法和程序设计的基础,广泛应用于各种软件开发中。 1. 链表(List) 链表是一种动态数据...
本教程主要针对"ListControl排序"这一主题进行详细阐述,帮助开发者理解如何在MFC环境下实现ListControl的排序功能。 首先,`ListControlSort.aps`、`ListControlSort.clw`、`ListControlSortDlg.cpp`、`...
删除ListControl中的数据项,可以通过索引或者选择的项来实现。以下代码示例展示了如何删除指定索引的数据项: ```csharp listControl1.Items.RemoveAt(0); // 删除第一项 ``` 如果你想根据用户的选择删除项,可以...