Arratlist的add函数的插入使用bug

在做作业的过程之中遇到很奇怪的bug,经过在网上查阅资料发现有人已经针对我出现的过的问题给了的答案,如下所示(以下内容来源于网络)

List list = new ArrayList(50);

list.add(0,element);

list.add(2,element);

list.add(1,element);


编译运行之后抛出了exception,百思不得其解,等到看了源码之后才发现原因,ArrayList  add(index,element)方法源码:

public
void add(int index, E element) {

   if
(index > size || index < 0)

       throw
new IndexOutOfBoundsException(

       "Index: "+index+", Size: "+size);

   ensureCapacity(size+1); 
// Increments modCount!!

   System.arraycopy(elementData, index, elementData, index +
1,

            size - index);

   elementData[index] = element;

   size++;

  }

从代码中可以看出,当数组中的元素个数(size)小于index的时候,此方法是会抛出异常的。

所以此方法只适用于想要插入的位置小于数组中实际元素个数的时候才有作用。

也就是说,让list里面没有元素时,想通过插入元素到指定位置来达到排序的效果是不可行的。

时间: 2024-10-05 05:16:41

Arratlist的add函数的插入使用bug的相关文章

[Leveldb源码剖析疑问]-block_builder.cc之Add函数

Add函数是给一个Data block中添加对应的key和value,函数源码如下,其中有一处不理解: L30~L34是更新last_key_的,不理解这里干嘛不直接last_key_ = key.ToString(); 写成 // Update state last_key_.resize(shared); last_key_.append(key.data() + shared, non_shared); assert(Slice(last_key_) == key); 是有什么其他原因吗?

Calendar中add函数和roll函数的用法及区别

Calendar中add()和roll()函数的用法一.取某个时间点后的整点时刻.例如1984年7月7日15:23:05后的整点时刻即为1984-07-07 16:00:00.实现如下:Calendar calendar = Calendar.getInstance();calendar.add(Calendar.HOUR_OF_DAY, 1);//小时上加1calendar.set(Calendar.MINUTE, 0);//分钟设为0calendar.set(Calendar.SECOND,

base_convert()函数探秘及小bug记录

php base_convert函数原型: string base_convert ( string $number , int $frombase , int $tobase ) base_convert — 在任意进制之间转换数字返回一字符串,包含 number 以 tobase 进制的表示.number 本身的进制由 frombase 指定.frombase 和 tobase 都只能在 2 和 36 之间(包括 2 和 36).高于十进制的数字用字母 a-z 表示,例如 a 表示 10,b

与number_format函数有关的一个bug?

最近在做一个模仿excel功能的在线项目.其中有一个功能,数据列表中的数据,到了最后一列都要进行总计.这本来没什么难度.直接从数据库取出数据后,进行foreach相加就行 了.这是如此的简单,以至于用了不到五分钟写就了功能,根本没把脑子带在身上. 两天后的一次不经意的浏览页面,发现统计的结果不对.于是左思右想,竟然没有发现我的计算有什么逻辑上的bug.但没有bug,最后的计算结果不对,肯定是哪里有问题,只是我现在没有发现而已. 后来反复输出原始数据,竟然发现,从数据库取出的数据是经过number

仿小米便签图文混排 EditText解决尾部插入文字bug

一直想实现像小米便签那样的图文混排效果,收集网上的办法无非三种: 1.自定义布局,每张图片是一个ImageView,插入图片后插入EditText,缺点是实现复杂,不能像小米便签那样同时选中图片和文字 2.通过Html.fromHtml(source),可以将图片加载写进ImageGetter,实现后无bug,但是只能显示Html,当EditText setText后,想取出之前的HTML格式      图片得到的是一个obj的字符,查看了很多博客,包括stackoverflow也没给出办法从e

python的自省函数, 快速找出BUG的良器

python内置的好多自省函数,  合理使用可快速查找相关提示, 快速找到问题点, 以下开始具体说明 1. dir()  列出对象的所有属性和方法 如:  dir(list)  可以列出列表的所有属性和方法 ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',

LeetCode Implement Trie (Prefix Tree) (实现trie树3个函数:插入,查找,前缀)

题意:实现trie树的3个功能,只含小写字母的串. 思路:老实做即可! 1 class TrieNode { 2 public: 3 TrieNode* chd[26]; 4 bool flag; 5 // Initialize your data structure here. 6 TrieNode() { 7 memset(chd,0,sizeof(chd)); 8 flag=0; 9 } 10 11 }; 12 13 class Trie { 14 public: 15 Trie() {

解决Delphi7的自带的UTF-8编码转换函数BUG

Delphi7及其以下版本的 VCL 只支持 Ansi, 所以... WideString 与 UTF8String (定义与 AnsiString 相同) 并没有办法正确的在 VCL 中显示 Delphi7自带的utf-8转换函数遇到其无法识别的字符串就返回空. 用以下转换函数可以解决这个bug unit util_utf8; interface uses Windows; type UTF8String = AnsiString; function AnsiToWide(const S: A

数组的方法(连接,截取,删除,插入,替换,以及封装一个函数)

连接两个数组:concat,形成一个新数组 数组1.concat(数组2,数组1) 返回值:数组 var arr1=[1,2], arr2=[3,4], arr3; arr3=arr1.concat(arr2,arr1); console.log(arr3); 另外方法,截取<是来是>__.slice(start,end) ___.slice(start,end)功能:从已有的数组中返回选定的元素 参数 如果参数有一个是负数,则用数组长度加上该数来确定相应的位置 start(必须)规定从何处开