首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java基础会合总结(list)

2012-08-26 
java基础集合总结(list)(一) list的存,移除和清空方法1public static void testList(int i){list.add(i)S

java基础集合总结(list)

(一) list的存,移除和清空

方法1

public static void testList(int i){

list.add(i);

System.out.println(list.get(0));

list.remove(i);

System.out.println(list.size());

}

方法2

? ? ??public static void testList(Integer i){

list.add(i);

System.out.println(list.get(0));

list.remove(i);

System.out.println(list.size());

}
在执行了两个方法后会有什么不同的结果?执行方法1后由于传入的是int基本类型,所以在list.add(1)的时候已经将int型的1自动转换为Integer对象了,这叫java的自动装箱。所谓自动装箱,就是原始数据类型(int, long, double, float, boolean等),在需要的时候自动封装成对应的类的对象(Integer, Long, Double, Float, Boolean等)。因为add()方法只支持存放对象,所以需要装箱,而在list.remove(i)时候list提供了两个remove的方法,分别是整形和对象类型,整形用于根据list索引下标直接找到对象并移除,而对象则是直接找到对象并移除,因此在此处执行list.remove(i)就会被编译器立即为根据下标找对象,而当前只添加了一个对象到List,下标起始位应该为0,因此Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1这个错误就是必然的了。而执行方法2则避免了这个问题,直接移除了存入的对象。

?

方法3

?

public static void testList(){

?

List<String> list = new ArrayList<String>();

list.add("aaa");

list.add("bbb");

list.add("ccc");

List<String> listB = new ArrayList<String>();

listB.add("ddd");

listB.add("eee");

listB.add("ccc");

list.removeAll(listB);

System.out.println("list的个数为:"+list.size()+ "-->"+list.get(0)+" ?"+list.get(1));

}

结果为 :?list的个数为:2-->aaa ?bbb 显然,list.removeAll(listB)方法删除了list中与listB共同存在的'ccc'项.那如果将list.removeAll(listB)替换为list.retainAll(listB) 结果为 :?list的个数为:1-->ccc ,也就是说retainAll方法删除了list中与listB不同的元素只保留了2者相同项。

?

方法3

list.clear(); 这个方法能够清空list中所有元素。

?

(二) list的之间的增量添加

?

public static void testList(){

List<String> list = new ArrayList<String>();

list.add("aaa");

list.add("bbb");

list.add("ccc");

List<String> listB = new ArrayList<String>();

listB.add("ddd");

listB.add("eee");

list.addAll(0,listB);

System.out.println("list的个数为:"+list.size()+ "-->"+list.get(0)+" ?"+list.get(1)+" ?"+list.get(2)+" ?"+list.get(3)+" ?"+list.get(4));

}

结果为: list的个数为:5-->ddd ?eee ?aaa ?bbb ?ccc 可以看出list.addAll(0,listB);是将listB对象中的元素按指定的索引添加到list中,当前给的索引值是0,因此ddd eee 在最前面出现。

?

?

public static void testList(){

List<String> list = new ArrayList<String>();

list.add("aaa");

list.add("bbb");

list.add("ccc");

List<String> listB = new ArrayList<String>();

listB.add("ddd");

listB.add("eee");

listB.add("ccc");

list.addAll(listB);

List<String> listC = list.subList(2, 3);

System.out.println("list的个数为:"+list.size());

System.out.println("listC的个数为:"+listC.size()+""+listC.get(0));

}

该方法执行结果:

?list的个数为:6

?listC的个数为:1ccc

因为执行了list.addAll(listB);所以list的个数是6 , 执行了List<String> listC = list.subList(2, 3);所以返回了一个新的listC结果为 ccc ?

?

?

public static void testList(){

List<String> list = new ArrayList<String>();

list.add("aaa");

list.add("bbb");

list.add("ccc");

List<String> listB = new ArrayList<String>();

listB.add("ddd");

listB.add("eee");

listB.add("ccc");

list.addAll(listB);

//list.remove("eee");

?

if(list.contains("ccc"))

System.out.println("包含 ccc ");

if(list.containsAll(listB)){

System.out.println("包含 listB");

}else{

System.out.println("不包含 listB");

}

}

运行结果为 :?包含 ccc ,包含 listB 但我们取消list.remove("eee");的注释后发现第二句变成了:不包含 listB ,也就是说list.containsAll是判断list里面是否包含全部的listB的元素,缺一不可。

?

list的迭代功能

?

public static void testList(){

List<String> list = new ArrayList<String>();

list.add("aaa");

list.add("bbb");

list.add("ccc");

List<String> listB = new ArrayList<String>();

listB.add("ddd");

listB.add("eee");

listB.add("ccc");

list.addAll(listB);

Iterator<String> itor = list.iterator();

Object str ;?

while(itor.hasNext()){

str = itor.next();

itor.remove();

System.out.println(str);

}

if(list.contains("ccc"))

System.out.println("包含 ccc ");

if(list.containsAll(listB)){

System.out.println("包含 listB");

}else{

System.out.println("不包含 listB");

}

}

此功能是在不知道list中所存放的类型情况下使用便利的方式得到数据。每遍历一次调用itor.remove()即可将该层次的对象移除。也就是list中的元素被一个个的移除,那么再执行的话结果就会是 :

aaa

6

bbb

5

ccc

4

ddd

3

eee

2

ccc

1

不包含 listB

热点排行