`
vtrtbb
  • 浏览: 361560 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

list基本实现

    博客分类:
  • java
阅读更多
复习数据结构,一个基本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);
		}
	}
}

 

分享到:
评论

相关推荐

    C++ 自实现的List

    在这个自定义的List实现中,我们可能包含了基本的添加元素(push)、删除元素(pop)以及赋值和加法操作。下面将详细解释这些概念和操作。 **1. 结构设计** 自定义的List通常由节点(Node)组成,每个节点包含一个...

    C++标准模板库中list容器实现

    首先,我们要理解`list`容器的基本概念。`list`由一系列的节点组成,每个节点包含一个元素和两个指针,分别指向前一个和后一个节点。这种设计使得在链表中插入或删除元素的时间复杂度为O(1),因为只需要改变相邻节点...

    MFC实现listCtrl双击表格,实现文本输入。

    本教程将详细介绍如何利用MFC ListCtrl控件,响应用户的双击事件,实现用户能够编辑表格中的文本。 首先,我们需要在MFC应用程序中添加一个ListCtrl控件。这通常是在资源编辑器中完成的,例如在对话框类的资源视图...

    Java 实现泛型List

    Java 实现泛型List的源码,基本实现了List接口的全部所有方法。欢迎大家发表自己的观点和建议。

    list to list 将list内容移到另一个list

    在编程领域,特别是涉及到数据操作的时候,`list` 是一种常用的数据结构,它在Python、JavaScript等语言中广泛使用。`list to list` 操作通常指的是将一个列表(list)的内容移动到另一个列表中,这可能涉及到列表的...

    STL的list模版实现学生管理系统

    在本项目中,"STL的list模版实现学生管理系统"是使用C++编程语言,特别是标准模板库(STL)中的list容器来构建的一个基本的学生信息管理应用程序。STL的list是一个双向链表,提供了高效的数据插入和删除操作,非常...

    skiplist跳表C++实现

    下面我们将深入探讨跳表的基本原理、C++实现的关键点以及测试程序的设计。 跳表的核心思想是通过多层索引来加速查找过程。每一层索引称为一个“级别”,最底层被称为0级,而上一层则是下一层的两倍概率存在。最高...

    Vs2010基于listctrl和listbox的滚动列表实现,具体效果博客中有介绍

    首先,让我们了解一下ListCtrl和ListBox的基本概念。ListCtrl通常在MFC(Microsoft Foundation Classes)库中使用,它是一种具有多种视图模式(如报告、图标、小图标和详细信息)的控件,可以显示多列数据,并支持...

    list control文本实现可编辑简易方法

    首先,我们需要理解List Control的基本结构。它由多个item组成,每个item又包含一项或多列数据。在MFC中,我们通常通过CListCtrl类来操作List Control。默认情况下,CListCtrl的item文本是只读的,无法直接修改。要...

    安卓开发使用edittext和list组合实现Spinner

    本教程将详细介绍如何通过EditText和List组合来实现Spinner,这对于初学者来说是一个很好的实践项目,有助于提升对Android开发的兴趣。 首先,Spinner的基本概念:Spinner是Android提供的一个下拉列表控件,它允许...

    ListCtrl实现双击编辑,绘图

    以上就是ListCtrl实现双击编辑和在ListCtrl中绘图的基本步骤。实际应用中,可能还需要处理更多的细节,如错误检查、数据同步等。通过ListCtrl的自定义绘制,我们可以实现高度定制化的界面,为用户提供更直观的数据...

    在List Control中实现列表项目的上下移动

    首先,我们需要理解List Control的基本结构。在MFC(Microsoft Foundation Classes)库中,List Control对应于CListCtrl类。它提供了丰富的功能,如添加、删除和修改列表项,以及设置各种视图样式(如报告视图、图标...

    实现对List的分页

    分页的基本思想是将一个大List分割成多个小List,每个小List代表一页数据。分页通常涉及到两个参数:当前页数(currentPage)和每页显示的条目数(pageSize)。为了实现这个功能,我们可以创建一个名为`...

    list,queue 纯C语言 简洁实现

    本文将深入探讨两个经典数据结构——列表(List)和队列(Queue),它们都是用纯C语言实现的,并且具有简洁和通用的特点。这些源代码可以在C/C++的各种编译器上运行,为开发者提供了便利。 首先,我们来解析“list...

    list实现的购物车

    综上所述,"list实现的购物车"项目结合了Python的基础数据结构和web开发中的cookie技术,通过这些工具,我们可以创建一个基本的、能在用户会话间持久化的购物车系统。然而,实际的电商系统可能还需要考虑更多的细节...

    利用list Control实现的条目上移和下移功能

    首先,我们需要理解List Control的基本概念。在MFC(Microsoft Foundation Classes)库中,List Control通常是CListCtrl类的实例,它提供了一个多列、多选择的视图,用于展示数据。我们可以向List Control中添加、...

    CheckBoxList实现单选 C#(WEB)

    本篇将详细介绍如何在C#环境下,针对ASP.NET Web Forms应用,实现CheckBoxList控件的单选效果。 首先,我们需要理解CheckBoxList的基本结构。CheckBoxList控件是基于HTML的多选框列表,每个选项由一个CheckBox控件...

    c语言实现的模板(list queue stack)

    本项目是基于C语言实现的数据结构模板,包括链表(List)、队列(Queue)和栈(Stack)三种基本数据结构。这些数据结构是算法和程序设计的基础,广泛应用于各种软件开发中。 1. 链表(List) 链表是一种动态数据...

    MFC实现ListControl排序

    本教程主要针对"ListControl排序"这一主题进行详细阐述,帮助开发者理解如何在MFC环境下实现ListControl的排序功能。 首先,`ListControlSort.aps`、`ListControlSort.clw`、`ListControlSortDlg.cpp`、`...

    ListControl控件基本用法

    删除ListControl中的数据项,可以通过索引或者选择的项来实现。以下代码示例展示了如何删除指定索引的数据项: ```csharp listControl1.Items.RemoveAt(0); // 删除第一项 ``` 如果你想根据用户的选择删除项,可以...

Global site tag (gtag.js) - Google Analytics