1.用代码说话
1 package JavaProject; 2 import java.util.*; 3 4 public class A{ 5 public static void main(String[]args){ 6 List<String> list=new ArrayList<String>(Arrays.asList("ab","cd","ef","gh")); 7 8 /** 9 *list.add(param1),list列表末尾插入param1, 10 *list.addAll(param1),list列表末尾插入param1,param1是列表 11 *list.add(param1,param2);或者list.addAll(param1,param2),均表示在param1处插入param2插入 12 *eg:list.add(0,"ij"); 13 *eg:list.addAll(1,Arrays.asList("kl","mn")); 14 */ 15 16 /** 17 *list.remove(0);//return list(0) 18 *list.remove(new String("cd"));//return boolean 找不到,返回-1 19 *list.removeAll(Arrays.asList("gh","ef"));//return boolean 找不到返回-1 20 */ 21 22 /** 23 *list.set(0,"dkdkd");//替换 24 */ 25 26 /** 27 *list2.set(0,"ddddddd"); 28 *System.out.println(list);//[ddddddd, cd, ef, gh] 29 *可见sublist函数维护者原list对象的引用。 30 *因此对list2的操纵同样会在list中反应出来 31 */ 32 33 34 35 /** 36 *list.get(param1);//获取param1位值,list.get(0); 37 *list.indexOf(param2)//获取param2的序号,list.indexOf("ab"); 找不到,返回-1 38 */ 39 40 /** 41 *下面是对列表排序,打乱顺序的两种方法 42 *Collections.sort(list2); 43 *Collections.shuffle(list2); 44 */ 45 46 /** 47 *@param 从较大列表中创建片段,前开后闭 48 *List<String> list2=list.subList(0,2); 49 */ 50 51 /** 52 *!!!注意 sublist函数虽然是从较大列表中创建出一个片断, 53 *但是subList()所产生的列表的幕后就是初始列表,因此,对所返回的列表的修改都会 54 *反应到初始列表中,反之亦然! 55 *List<String> list2=list.subList(0,3); 56 *List<String> list3=list.subList(2,3); 57 *System.out.println(list2.retainAll(list3));//throw Exception,具体原因不明 58 *大概是因为,list2,list3同时list的片断,list2,移除操作造成list3被更改! 59 ================================================================= 60 *List<String> list2=list.subList(0,3); 61 *List<String> list3=list.subList(2,3); 62 *list2.remove(0); 63 *System.out.println(list3);//Exception,这里抛出异常可以解释上面retainAll抛出异常的原因 64 */ 65 66 /** 67 *Collection的retainAll函数的用法是求交集 68 JDK1.6中的源码: 69 70 public boolean retainAll(Collection<?> c){ 71 boolean modified = false; 72 Iterator<E> e = iterator(); 73 while (e.hasNext()){ 74 if (!c.contains(e.next())){ 75 e.remove(); 76 modified = true; 77 } 78 } 79 return modified; 80 } 81 *所以此函数的意思是: 82 *仅保留当前collection中那些也包含在指定参数collection中元素 83 *如果当前collection因为调用该函数发生了改变,就返回true,否则,false。 84 */ 85 86 /** 87 *无论是直接应用字符串常量,还是显式new创建String对象 88 *(应为String变量默认的equals方法是只要内容想用就返回true) 89 *以及顺序如何,都不影响containsAll的结果 90 */ 91 92 /** 93 *class Pet{} 94 *注意自定义对象默认的equals方法,是比较是同一个对象。 95 *List<Pet> pets=new ArrayList<Pet>(); 96 *pets.add(new Pet()); 97 *System.out.println(pets.indexOf(new Pet()));//-1 ,pets.contains(new Pet())false 98 */ 99 100 /** 101 *list.toArray 102 *toArray 方法将任意的Collection转换为一个数组,这是一个重载方法 103 *其无参数版本返回的是Object数组,如String str[]=list.toArray();将报类型转换错误 104 *如果向重载版本传递目标类型的数据,并且能通过类型检查,则将产生制定类型的数据。 105 *例如:String []str=list.toArray(new String[0]); 106 */ 107 /** 108 *如果参数数组太小,存放不下List中的所有元素,toArray()方法将创建一个合适大小的数组 109 *String []str=new String[2]; 110 *str=list.toArray(new String[0]); 111 *System.out.println(Arrays.toString(str)); 112 */ 113 //list.clear();清空列表 114 //list.size();列表大小 115 //list.isEmpty();列表是否为空 116 } 117 }
时间: 2024-10-08 15:25:19