arraylist

C++ Vector线性表的数组实现

核能气质少年 提交于 2020-02-15 17:19:47
STL中的Vector容器就是线性表的数组实现,因为最近学习数据结构,于是手工实现了一遍数组描述的线性表 // 2020/02/14 Tealer.Guo #include <algorithm> // copy(), find(), copy_backward() #include <iostream> #include <iterator> // ostream_iterator<> // 线性表 // ADT 抽象数据类型 // 纯虚函数 template<typename T> class linearList { public: virtual ~linearList() {}; virtual bool empty() const = 0; // 当线性表为空时,返回0 virtual int size() const = 0; // 返回线性表的元素个数 virtual T& get(int this_index) const = 0; // 返回具有this_index索引的元素 virtual int indexOf(const T& this_elem) const = 0; // 返回元素的索引 virtual void erase(int this_index) = 0; // 删除该索引的元素 virtual void insert(int this

ArrayList中你分得清楚size与capacity的区别吗?

浪子不回头ぞ 提交于 2020-02-15 16:50:34
文章目录 问题 实验 追根究底 查看ArrayList的构造函数 查看ArrayList的add(index, data)函数 总结 总结图 JDK版本: openJDK 1.8 问题 在ArrayList中,size跟capacity是一样的东西吗? 实验 在ArrayList中有这么一个构造函数可以让我们指定初始的容量(Capacity)。 public ArrayList ( int initialCapacity ) ; 然后我们可以利用这个构造函数来创建一个ArrayList并在构造函数里指定初始容量为10。接着尝试在下标为9的位置插入一个数据。 ArrayList list = new ArrayList < Integer > ( 10 ) ; int index = 9 ; int data = 0 ; list . add ( index , data ) ; 原本我的想法是,既然我们的初始容量可以容纳10个数据,那么在下标为9的位置插入一个数据应该是没有问题的。然而程序却抛出了一个异常错误: Exception in thread "main" java . lang . IndexOutOfBoundsException : Index : 9 , Size : 0 根据这个异常错误信息,往下标9的位置插入数据超越了数组的界限。 追根究底 这就很奇怪了

线性存储结构-ArrayList、Vector

纵饮孤独 提交于 2020-02-15 16:08:45
ArrayList:采用数组的内部构建形式,也就是顺序存储模式。当新增一个对象时,如果当前长度超过预设,会使用System.arraycopy(定义一个更长的数组进行复制处理),这个时候开销比较大。 System.arraycopy,数组长度小于32的采用的是java层的遍历处理,长数组采用的是native层的处理 /** * The byte array length threshold below which to use a Java * (non-native) version of arraycopy() instead of the native * version. See b/7103825. */ private static final int ARRAYCOPY_SHORT_BYTE_ARRAY_THRESHOLD = 32; /** * The byte[] specialized version of arraycopy(). * * @hide internal use only */ public static void arraycopy(byte[] src, int srcPos, byte[] dst, int dstPos, int length) { if (src == null) { throw new

把二叉树打印成多行

怎甘沉沦 提交于 2020-02-15 16:07:28
import java.util.ArrayList; import java.util.LinkedList; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> m= new ArrayList<ArrayList<Integer>>(); if(pRoot==null) return m; LinkedList<TreeNode> deque=new LinkedList<TreeNode>(); deque.offer(pRoot); int nextLevel = 0; int toBePrinted = 1; ArrayList<Integer> temp=new ArrayList<Integer>(); while(!deque.isEmpty()){ TreeNode pNode = deque.peek(); temp.add

23种设计模式(5):原型模式

China☆狼群 提交于 2020-02-15 03:43:34
定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 类型:创建类模式。 类图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件: 实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。 重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中有一个clone方法,作用是返回对象的一个拷贝,但是其作用域protected类型的,一般的类无法调用,因此,Prototype类需要将clone方法的作用域修改为public类型。 原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式很少单独出现。经常与其他模式混用,他的原型类Prototype也常用抽象类来替代。 实现代码: class Prototype implements Cloneable { public Prototype clone(){ Prototype prototype = null; try{

ArrayList,LinkedList,HashSet,HashMap(熟悉和理解容器,手动写一些简单的容器)

一个人想着一个人 提交于 2020-02-15 02:07:08
ArrayList import java . util . ArrayList ; public class myArrayList < E > { private Object [ ] elementDate ; private int size ; private static final int DEFAULT_CAPACITY = 10 ; //默认数组的容量 //构造器 public myArrayList ( ) { elementDate = new Object [ DEFAULT_CAPACITY ] ; } public myArrayList ( int capacity ) { elementDate = new Object [ capacity ] ; } //增加元素,需要进行扩容 public void add ( E element ) { //当放入的元素个数size与数组的长度相等时,需要进行扩容 if ( size == elementDate . length ) { Object newArray = new Object [ elementDate . length + ( elementDate . length >> 1 ) ] ; //15 //增加原数组的个数 System . arraycopy ( elementDate

ArrayList集合存储基本数据

浪尽此生 提交于 2020-02-14 21:41:45
ArrayList集合存储基本数据 如果要在ArrayList当中存储基本类型数据,必须使用基本类型对应的“包装类” 基本类型 包装类 byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean 从JDK 1.5开始,支持自动装箱,自动拆箱。 自动装箱:基本类型–>包装类型 自动拆箱:包装类型–>基本类型 //练习一:随机存储 package com . company ; import java . util . ArrayList ; import java . util . Random ; /* 题目: 生成6个1-33之间的随机整数,添加到集合,并遍历集合 思路: 1、需要存储六个数字,创建一个集合,<Integer> 2、产生随机数,需要用到Random 3、用循环六次,来产生六个随机数字,for循环 4、循环内调用r.nextInt(int n) 参数是33.0-32,集体加一才是1-33 5、把数字添加到集合中:add 6、遍历集合:for size get */ public class ArrayListRandom { public static void main ( String [ ] args ) {

JAVA中fail-fast机制

℡╲_俬逩灬. 提交于 2020-02-14 14:07:18
在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList: 注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失败行为应该仅用于检测 bug。 HashMap中: 注意,迭代器的快速失败行为不能得到保证,一般来说,存在非同步的并发修改时,不可能作出任何坚决的保证。快速失败迭代器尽最大努力抛出 ConcurrentModificationException。因此,编写依赖于此异常的程序的做法是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测程序错误。 在这两段话中反复地提到”快速失败”。那么何为”快速失败”机制呢? “快速失败”也就是fail-fast,它是Java集合的一种错误检测机制。当多个线程对集合进行结构上的改变的操作时,有可能会产生fail-fast机制。记住是有可能,而不是一定。例如:假设存在两个线程(线程1、线程2),线程1通过Iterator在遍历集合A中的元素,在某个时候线程2修改了集合A的结构(是结构上面的修改,而不是简单的修改集合元素的内容),那么这个时候程序就会抛出

word模版另存为网页(*.htm,*.html),转为jsp页面并加入数据后导出成word

北战南征 提交于 2020-02-14 02:07:36
word模版另存为网页之后,将html格式的文件转为jsp页面,在页面上加入相应的动态值,加入的值中包含图片,这个该怎么处理??另外导出的文件需要拷贝到不同的地方(无法联网)使用。 <%@ page contentType="application/vnd.ms-word; charset=GBK" language="java" import="java.util.*,java.io.*"%> <%@ taglib uri="tableURI" prefix="Combo" %> <%response.setContentType("application/msword");%> <%response.setHeader("Content-Type","application/msword");%> <%response.setHeader("Content-disposition","attachment;filename=djb.doc");%> <html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns=" http://www.w3

Object IO Exercise

☆樱花仙子☆ 提交于 2020-02-14 00:34:20
Object IO Exercise 介绍: 解决多个对象存储到文件中,从文件中取出多个对象 分析: 1.定义一个存储person类的集合的ArrayList 2.往ArrayList中存储Person对象 3.创建一个序列化流ObjectOutputStream对象 4.使用ObjectOutputStream对象中的方法writeobject,对集合进行序列化 5.创建一个反序列化ObjectInputStream对象 6.使用ObjectInputStream对象中的方法readObject读取文件中保存的集合 7.把Object类型中的集合转换为Arraylist类型 8.遍历ArrayList集合 9.释放资源 创建person对象 补充: 列化和反序列化的时候会抛出NotSerializableException没有序列化的异常 public class NotSerializableException抛出一个实例需要一个Serializable接口。 Serializable接口也叫标记型接口 要进行序列化和反序列化的类必须实现Serializable接口,就会给类标记 当我们进行序列化和反序列化的时候,就会检测类上是否有这个标记 有:就可以序列化和反序列化 没有,就会抛出上面的异常*/ /*static关键字:静态关键字 静态优先于非静态加载到内存中