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的个数为:1 ccc

因为执行了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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值