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 }