当前位置:首页 » 存储配置 » 删除存储对象

删除存储对象

发布时间: 2022-10-30 21:01:28

A. 用java创建一个称为List的类,它能存储任何类型的对象,并可以在任何时候增加或删除对象

Java中是有java.util.List接口的,实现类有一大堆,常用的有ArrayList(底层是数组)和LinkedList(底层是链表),创建方法是这样的:

List<Object>arryList=newArrayList<Object>();
List<Object>linkedList=newLinkedList<Object>();

上面用到是多态。

添加是这样的:

arrayList.add(obj);
linkedList.add(obj);//两个一样,没区别

删除是这样的:

arrayList.remove(0);//0是下标
linkedList.remove(0);

如果只是增加和删除的话,建议使用LinkedList,效率高一些。

如果非要自己写一个类的话,会麻烦很多。

publicclassList<L>{
privateLinkedList<L>list=newLinkedList<L>();
publicvoidadd(Ll){
list.addLast(l);
}
publicvoidremove(inta){
//方法
list.remove(a);
}
}

其中L表示范型, 别问为什么要用L,因为我姓梁。

希望我的回答能对你有所帮助,荣幸之至。

B. List中存储的对象,移除以后,会有什么现象,请解释

这个问题看似好像挺简单挺幼稚的,然而就这个幼稚的问题还曾经困扰过我一阵呢,其实犯这个错误的根本原因是我们对于基础知识的理解和掌握上还有不足的表现,基本功有些人总是觉得不重要,认为更多的扩大学习的广度才是最重要的,我认为这是很容易犯的,同时也是很致命的错误观点!
对基础知识掌握不牢靠,或理解不深刻,写出的代码必然会有40%的概率是错误的、低效的,一段代码不是说没有编译错误就一定是对的,不是说简单的运行下就一定是对的,优秀的代码,是经得起“刀山火海”般的考验的(“多线程、效率、安全”这三坐大山)。
所以重要性,我就不再强调了,相信说完后,地球人都能懂我的意思,那么下面就来看看这个有趣的现象吧。

先看看如下代码

[java] view plain
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class TestList {

void init(List<Integer> list) {
list.clear();
for (int i = 0; i < 10; i++) {
list.add(i + 1);
}
}

void remove(List<Integer> list) {
for (int i = 0; i < 5; i++) {
list.remove(i);
}
}

void removeTwo(List<Integer> list) {
for (int i : list) {
if (i < 6) {
list.remove(i);
}
}
}

void removeThree(List<Integer> list) {
for (Iterator<Integer> iter = list.iterator(); iter.hasNext();) {
int i = iter.next();
if (i < 6) {
iter.remove();
}
}
}

public static void main(String[] args) {
TestList testList = new TestList();
List<Integer> list = new ArrayList<Integer>();

// 第一种方法
testList.init(list);
testList.remove(list);
System.out.println(list);

// 第二种方法
try {
testList.init(list);
testList.removeTwo(list);
System.out.println(list);
} catch (Exception e) {
e.printStackTrace();
}

// 第三种方法
testList.init(list);
testList.removeThree(list);
System.out.println(list);
}
}
运行的结果如下:
[2, 4, 6, 8, 10]
java.util.
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at com.TestList.removeTwo(TestList.java:23)
at com.TestList.main(TestList.java:60)
[6, 7, 8, 9, 10]

上面代码逻辑很简单,就是将List集合里的前5个对象删除掉,然而结果却是相当不一样:第一个是错误的结果,第二个直接报异常,只有第三个是我们想要的结果!

那么这是为什么呢?其实主要原因来自于List中的remove()方法。我们来分析一下:
第一种方法:
第一次执行完remove方法后,并不像我们简单想象的那样就把第一个删除了,“1”这个对象被删除了没错,但是当被删除后List中“2”以后的9个对象的index索引也变了,都比原来的值减一,换句话说就是剩下的9个对象的index值为从0到8,而不是原来的从1到9了,那么第二次执行remove方法时,此时list.remove(1)删除的就是“3”这个对象(“3”的index值为1),而不是我们想象的删除“2”对象。
第二种方法:
原因跟上面一样,导致List的next()方法内部出现modCount和expectedModCount不一致导致抛出异常。

所以我们这里建议大家采用第三种方法来删除List集合中某一个对象,这样做是最简单且容易记忆的。那第一种方法和第二种方法有没有解决的办法呢?目前我知道第一种方法的解决办法,第二种应该是无解的(因为语法结构导致)。

第一种方法的改进措施:

[java] view plain
void remove(List<Integer> list) {
int num = list.size() - 5;
for (int i = 0; i < num; i++) {
list.remove(i);
i--;
num--;
}
}

C. 可以在Iterator遍历的过程中正确并安全的删除一个list中保存的对象

ArrayList采用size属性来维护自已的状态,而Iterator采用cursor来来维护自已的状态。
当size出现变化时,cursor并不一定能够得到同步,除非这种变化是Iterator主动导致的。
从上面的代码可以看到当Iterator.remove方法导致ArrayList列表发生变化时,他会更新cursor来同步这一变化。但其他方式导致的ArrayList变化,Iterator是无法感知的。ArrayList自然也不会主动通知Iterator们,那将是一个繁重的工作。
Iterator到底还是做了努力:为了防止状态不一致可能引发的无法设想的后果,Iterator会经常做checkForComodification检查,以防有变。如果有变,则以异常抛出,所以就出现了上面的异常。

D. 怎样在pl/sql中创建,执行和删除存储过程

sqlserver存储过程的基本操作:

一、创建存储过程

1、语法格式:

createproc|procerepro_name
[{@参数数据类型}[=默认值][output],
{@参数数据类型}[=默认值][output],
....
]
as
SQL_statements

以上是最基本语法,举个简单的例子:

CREATEprocp_test
as
selectretu=1

2、执行存储过程

EXECUTEProcere_name''--存储过程如果有参数,后面加参数格式为:@参数名=value,也可直接为参数值value

3、删除存储过程

dropprocereprocere_name--在存储过程中能调用另外一个存储过程,而不能删除另外一个存储过程

E. Java中如何删除保存在文件中的对象

在定义输出流的时候,构造方法的参数除了文件对象,还有一个参数是boolean类型的 true是追加,false是覆盖

F. TList用法求教解决方案

您好,BCB的TList类说明
TList包含对象指针列表。
类关系 TObject
Tlist用于存储和维护对象列表。TList引入属隆和方法以执行以下操作:
(1)在列表中增加或删除对象。
(2)在列表中重排对象。
(3)在列表中定位和获得对象。
(4)在列表中对对象进行排序。
属性列表
Capacity 标识TList对象维护的指针数组的大小。
Count 表明在列表中使用的项的数量。
Items 列出对象的引用。
List 标识组成Items的指针数组。
方法列表
~TList 删除与TList对象有关的内存。
Add 在列表的末尾插入有关的内存。
Clear 从列表中删除所有项。
Delete 删除Index参数标识的项。
Error 产生EListError异常。
Exchange 交换Items数组中两项的位置。
Expand 增加列表的Capacity。
First 返回Items[0]。
IndexOf 返回Items数组中一指针的索引。
Insert 增加一对象至Items数组中。
Last 返回Items[Count-1]。
Move 在Items数组中改变某一项的位置。
Pack 从Items数组中删除所有的零项。
Remove 从Items数组中删除Items参数的第一个引用。
Sort 在列表中执行QuickSort。
TList 创建一个新的TList对象。
详细说明
属性
TList::Capacity
__property int Capacity = {read=FCapacity,write=SetCapacity,nodefault};
标识TList对象维护的指针数组的大小。
设置Capacity为列表将要包含的指旬数。当当设置Capacity属性时,如果没有足够的内存扩展列表为它的新的大小,将产生EOutOfMemory异常。
在没有重新分配内存情况下,读取Capacity可得到列表能包含的对象数。注意不要混淆Capacity和Count属性;Count属性为列表中使用的项的数量。Capacity值总是大于或等于Count值。当Capacity大于Count,通过设定Capacity至Count可以回收未使用的内存。当添加一对象至列表,而此列表已被填充到Capacity时,Capacity属性自动增加。在增加对象之前设置Capacity能减少内存重分配的数量,因此提高了执行效果。例如:
List->Clear();
List->Capacity = Count;
for(int i=0;i<Count;i++) List->add(...);
在for循环之前分配Capacity保证在随后的每一Add操作不重新分配列表。在调用Add时避免重新分配可以提高执行效果并且保证Add操作不产生异常。
TList:;Count
__property int Count = {read=FCount,write=SetCount,nodefault};
表明在列表中使用的项的数量。
读取Count可以确定Items数组中项的数量。增加Count的大小将在Items数组的末尾增加必要的零指针的数量;减小Count的大小将从Items数组的末尾删除必要的零指针的数量。
注意:Count并不总等同于列表中引用的对象的数量。在Items数组中,某些项将包含零指针。如果要删除零指针并且设置Count为对象引用的项数,则可以调用Pack方法。
TList::Items
__property void* Items[int Index] = {read=Get,write=Put};
列出对象的引用。
使用Items可以获得数组中指定对象的指针。Index参数标识对象的索引;第一个对象的索引值为0,第二个对象的索引值为1,以此类推。设置Items可以在指定位置改变引用。使用带有Count属性的Items可以遍历列表中的所有对象。
应该注意的是,并不是Items数组中所有的项都需包含对象的索引。有些项可能是零指针。如果要删除零掼针并且减小Items数组的大小至对象的数量,可以调用Pack方法。
TList::List
typedef void* TPointerLIst[134217727];
typedef TPointerLIst* PPointerList;
__property PPointerList List = {read=FList};
标识组成Items的指针数组。
使用List直接获得Items数组。
TList::~TList
__fastcall virtual~TList(void);
删除与TList对象有关的内存。
在应用中不要直接调用~TList。用delete替代。
~TList释放存储项列表的内存。注意,~TList并不释放指向列表元素的内存。
TList::Add
int __fastcall Ad(void* Item);
在列表的末尾插入新项,可以调用Add方法。Add方法返回值为新项的索引值;列表中第一项的索引值为0
如果Items数组使用完列表对象Capacity,则Add方法分配更多的内存。Add增加Count值以反映新指针的增加。注意:即使Items数组包含零指针,Add方法总是在Items数组的末尾插入Items指针。
TList::Clear
DYNAMIC void __fastcall Clear(void);
从列表中删除所有项。
如果要清空Items数组并且设置Count为0,可以调用Clear方法。Clear方法同时释放用于存储Items数组的内存并且设置Capacity为0。
// 本文转自 C++Builder研究 - i=333&d=i653m1
TList::Delete
void __fastcall Delete(int Index);
删除Index参数标识的项。
如果要从列表指定位置删除项,可以调用Delete方法。索引从零开始,因此第一项的索引值为0,第二项的索引值为1,以此类推。调用Delete方法向前移动删除项之后的所有英并减小Count。
如果要删除一项的索引但并不从列表中删除该项并且改变Count,可设置Index的Items属性为零。注意Delete并不释放的项相关的内存。如果要释放存储删除项的内存,可设置Capacity属性。
TList::Error
virtual void __fastcall Error(const System::AnsiString Msg,int Data) {Error(__classid(TList),Msg,Data};
产生EListError异常。
当TList对象出现错误时,调用Error产生异常。Error组合Msg参数标识的错误消息和Data参数标识的数据植,然后产生EListError异常。调用Error而不是增加一行程序代码。

G. 如何查询被删除的存储过程 sql

可以通过drop语句进行实现。
sql:drop procere procerename;
解释:上面的sql语句的意思就是删除出存储过程名为procerename的存储过程。
备注:drop(删除)的通常是对象,如表(table)、视图(view),功能(function)等。

H. java集合:关于hashmap存储一个对象,中间改变对象的值,为什么再remove不能用新名字来删除

这个得看hashset的源码了,内部会以hashcode或其经过某种算法得到的二次hash值为key来组织存储数据。

你重写了book的hashcode方法,并且内部用到了name来计算hashcode,那么当你修改了name后,它的hashcode自然变了,那么它就在原来的hashset里找不到了,自然删除不掉。

I. 如何将存储在string对象中的数据清除

stringbuffer 的append方法,append上list[i],最后把stringbuffer tostring一下

J. 回收站用于临时存放从什么地方删除的对象

你 点击 工具 再点击 文件夹选项 然后 选择“查看” 选项卡 选择 显示隐藏文件夹和文件名 然后 你就会在 你得 那几个硬盘里 看到 一个 回收站图标 诺 都在那里了~

热点内容
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:333
编译原理课时设置 发布:2025-05-18 04:13:28 浏览:374
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:608
java用什么软件写 发布:2025-05-18 03:56:19 浏览:29
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:102
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:937
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:736
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:800
网卡访问 发布:2025-05-18 03:35:04 浏览:507
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:369