list中add、set方法詳解

super_DuoLa發表於2020-11-03

Java中線性表List介面的插入方法有三大類,add、addAll和set,他們之間到底有什麼區別呢,我們一一來看

一、add方法,有2種過載方法

1、boolean  add(E element):用於向集合的末尾插入新的元素,是List介面中最常用的插入方法

List<String> list = new ArrayList<String>();
 list.add("小汪");
 list.add("小王");
 list.add("小旺");
			  
for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}			  

2、void  add(int index, E element):可以在插入操作過程中指定插入的位置【下標從0開始】

List<String> addlist = new ArrayList<String>();
 addlist.add(0,"小寫"); 
 addlist.add(1,"小謝"); 
 addlist.add(2,"小鞋");  
			  
for (int i = 0; i < addlist.size(); i++) {
    System.out.println(addlist.get(i));
}  

(1)當前要插入的位置已存在時,會自動將當前位置及之後的元素全部後移進行插入

List<String> addList = new ArrayList<String>();
addList.add(0,"小劉");//預設第一個
addList.add(0,"小六");//新加入已有位置元素時,原位置及後面所有元素後移【小六  變成下標為零的元素,原 小劉後移,其餘元素緊跟】
addList.add(1,"小柳");  
			  
for (int i = 0; i < addList.size(); i++) {
	System.out.println(addList.get(i));
} 			  

(2)引數index的值不能大於當前list的容量,即下標必須從0開始

List<String> addList = new ArrayList<String>();
addList.add(2,"小劉"); 
addList.add(0,"小六"); 
addList.add(1,"小柳");  
			  
for (int i = 0; i < addList.size(); i++) {
    System.out.println(addList.get(i));
} 

(3)由於ArrayList物件初始化時不包含任何元素,因此size的值為依舊為0,所以,即使在建立list物件時指定了初始化大小,也不可以從任意下標插入(無論是否初始化大小,下標必須從0開始

List<String> addsize = new ArrayList<String>(5);
   addsize.add(2,"小數"); 
   addsize.add(4,"小樹"); 
   addsize.add(1,"小叔");   
 			  
for (int i = 0; i < addsize.size(); i++) {
    System.out.println(addsize.get(i));
} 

二、addAll方法,有2種過載方法

1、 boolean addAll(Collection<? extends String> c:在集合末尾可以一次性插入一個集合

List<String> list = new ArrayList<String>();
   list.add("小汪");
   list.add("小王");
   list.add("小旺");
   list.add("");
   list.add(null);
			  
List<String> listObj = new ArrayList<String>();
	listObj.addAll(list); 
			  
for (int i = 0; i < listObj.size(); i++) {
	System.out.println(listObj.indexOf(listObj.get(i))+"----"+listObj.get(i));
 } 

可以插入空的集合,但不能直接插入null

List<String> list = new ArrayList<String>();
   list.add("小汪");
   list.add("小王");
   list.add("小旺");
   list.add("");
   list.add(null);

List<String> lista = new ArrayList<String>();
			  
List<String> listObj = new ArrayList<String>();
   listObj.addAll(list); 
   listObj.addAll(lista); 
   listObj.addAll(null); 
			  
for (int i = 0; i < listObj.size(); i++) {
   System.out.println(listObj.indexOf(listObj.get(i))+"----"+listObj.get(i));
} 


2、boolean addAll(int index, Collection<? extends E> c):可以在原集合的指定位置一次性插入一個新集合

List<String> list = new ArrayList<String>();
   list.add("小汪"); //0
   list.add("小王"); //1
   list.add("小旺"); //2
   List<String> lista = new ArrayList<String>();
			  
List<String> indexList = new ArrayList<String>();
   indexList.add("小哈");
   indexList.add("小蛤");
   indexList.add("小鉿");
			  
List<String> listObj = new ArrayList<String>(20);
   listObj.addAll(0,list); //0 1 2 
   listObj.addAll(1,lista);//不算數
   listObj.addAll(3,indexList); 
			  
for (int i = 0; i < listObj.size(); i++) {
   System.out.println(listObj.indexOf(listObj.get(i))+"----"+listObj.get(i));
} 

(1)跟add(E element)方法類似:當前要插入的位置已存在時,會自動將當前位置及之後的元素全部後移進行插入

(2)插入的空集合是不算數的

(3)下標規則與add(int index, E element)方法一致,無論是否初始化大小,只能插入已存在且合法的下標

三、set(int index,E element):實際上是一種替換操作

List<String> list = new ArrayList<String>();
   list.add("小汪"); //0
   list.add("小王"); //1
   list.add("小旺"); //2
			  
   list.set(2,"哇哈哈");  
			  
for (int i = 0; i < list.size(); i++) {
   System.out.println(list.indexOf(list.get(i))+"----"+list.get(i));
} 

 要設定某個位置上的元素,這個位置必須已存在,否則會丟擲異常

 

 

相關文章