Collection集合

来源:互联网 发布:阿里云邮箱服务器设置 编辑:程序博客网 时间:2024/05/06 16:13


 

一、集合的概念

1.什么是集合

       集合是一种容器,长度可变,可以存储任意类型的对象.

基本数据类型也可以装入集合, 但其实内部是先自动装箱成包装类对象,然后再存入集合的(可以存放任意引用类型的数据,而不能存放基本数据类型,如果即使放了基本数据类型,也自动进行了装箱)

集合中也有一个数组(每次看是否用完然后以1.5的速度增长(小数舍弃))

 

2.数组和集合的异同:

 1.即可以存储基本数据类型,也可以存放引用数据类型

   集合只可以存放任意引用类型的数据,而不能存放基本数据类型,如果即使放了基本数据类型,也自动进行了装箱

 2数组的长度是不可以改变的

   集合的长度是可变的,会随着元素的增加而增加。

不变用数组,可变的用集合

 

 

 

 

1、使用:Collection coll = new ArrayList();

     coll.add("a");

     coll.add(123);

     coll.add(true);

   coll.clear();  //clear()方法清空集合中的所有对象

  boolean b = coll.contains("z"); //contains()方法判断集合中是否包含z

  coll1.equals(coll); //equals 方法比较两个集合对象,同String中的equals,对象中如果字                                        符序列相同则返回true;里面的是有顺序的,如下中是正确的,但如果换顺序就报错。

(1)Collection  coll = new ArrayList();    (2) Collection coll 1= new ArrayList();

 

     coll.add("a");                      coll1.add("a");

     coll.add("b");                      coll1.add("b");

     coll.add("c");                      coll1.add("c");

    

coll.isEmpty();  //isEmpty()方法判断集合是否为空

coll.remove("c");//remove()删除传入的元素,删除成功返回true,否则为false

coll.size();    //size()获取集合长度

coll.addAll(coll1);//addAll()把一个集合中的全部元素添加的另一个集合中结果

               //[a,b,c,a,b,c]如果用coll.add(coll1);就是把coll1看做

               //一个对象结果[a,b,c,[a,b,c]]

coll.containsAll(coll1);//判断coll1是不是coll的子集

coll.removeAll(coll1);//删除collcoll1的交集,返回true

coll.retainAll(coll1);//取交集保留下来传给coll,返回值看coll的结果有没有改变, 

                //不改变为  false改变为true

 

Collection是集合类的上级接口,继承与他的接口主要有SetList.
Collections
是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

二、迭代器迭代:

2、使用List list  = new ArrayList();

          list.add("a");

          list.add("b");

          list.add("c");

          list.add(3,"z");// 在索引3出添加z

          

for(inti=0;i<list.size();i++)    //list集合中的一种迭代方式(遍历)(迭代第一种)

{

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

}

 

intindex=list.indexof("a");// 第一个a的索引

intindex=list.lastIndexof("a");//最后一个a的索引

 

Object obj =list.remove(0); //通过索引删除元素

boolean b=list.remove("a"); //通过对象删除元素

 

此处要注意:list.add(123); 如果删除list.remove(123);则报出角标越界异常,因为不会自动装箱。//此处应该手动装箱 list.remove(new Integer(123));

 

list.set(0,"aaa");//修改指定位置的元素,指定位置要在0—长度减1的之间

 

list.subList(1,4);//有返回值,应该建一个List引用对象来存放。

 

 

 

   //只要是能用迭代器迭代的都可以用增强for循环

   iterator it = list.iterator();   // 获取迭代引用     //迭代方式一(迭代第二种

   while(it.hasNext()){       //判断集合是否有元素

   Sysotem.out.println(it.next());//获取集合元素

}

 

for (Iterator it2= list.iterator() ; it2.hasNext(); ){  //迭代第二种方式,节约一点内存

  System.out.println(it2.next());

}

 

 

// 迭代的功能为什么抽取到一个接口中?

  因为整个集合框架体系结构,每一个类存储的结构(数据结构)都是不一样的,存的不一样,就导致取得也不一样,所以没办法定义一套方法,来获取所有的集合类中的存储对象,那么就抽取抽象的方法,由具体的子类去实现即可。

 

 

 

3、迭代:ArrayList方法

 

ArrayList list =new ArrayList();

 

//增强for循环foreach   迭代第三种

1.5新特性;

for(临时变量:容器名){   //临时变量的数据类型和集合中存储的元素的数据类

                         //型一致 (他的底层就是使用迭代器)

 System.out.println(临时变量);

}

 

for(Object obj : list){      //添加的字符串自动提升为Object

 System.out.println(obj);

}

 

 

 

 

三、三种迭代方式中的删除问题

1、普通for循环

 for (int i=0;i<list.size();i++){

  Object obj = list.get(i);

  if(obj.equals("a")){

   list.remove(i - -);  //因为i会加1索引会减1,中间有个值会被跳过去,所以

                  //用后- -运算

 }

}

2、迭代器的删除

Iteratorit=list.iterator()

while(it.hasNext()){

Object obj =it.next();

if(obj.equals("b")){     

  list.remove("b");     //并发修改异常即迭代器在迭代时,不能用集合删除

                      //方法 此处应该用迭代自己的it.remove();//不能传参

 }

}

3、增强for循环删除

for(Object  obj : list){

   if(obj.equals("b")){

    list.remove(obj);   //也会出现并发修改异常,不能用来删除。

   }

}

 

 

0 0
原创粉丝点击