當前位置:首頁 » 存儲配置 » 刪除存儲對象

刪除存儲對象

發布時間: 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 瀏覽:331
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:371
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:606
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:27
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:101
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:935
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:730
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:798
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:506
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:368