黑马程序员-java中集合常用的类之一List类

来源:互联网 发布:淘宝5年老店条件 编辑:程序博客网 时间:2024/05/17 00:54
---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

一、 集合:集合是一种容器,长度是可变的,可以存储任意类型的对象。
  集合分类:Collection接口下常用类型有两种:List Set
  List:有存储顺序的,可以重复的;
  Set:没有存储顺序的,不可以重复;
  List集合:
   ArrayList: 数组结构,查找快,增删慢;由于增删的时候需要创建或者拷贝数组,   所以速度较慢;而查找是直接操作内存,获取数组中的元素。
   LinkedList: 链表结构,增删快,查找慢;增加的时候只要让最后一个元素记住    新来的元素即可,删除的时候只要让前一个记住后一个,后一个记住前一个,   查找的时候需要逐个查找,所以速度较慢。
  List常用方法:
   boolean add(E e):向集合中添加一个对象,如果改变了集合的结构,返回true,   集合可以添加任意类型的对象。
   Object get(int index):从集合中获取指定索引上的对象.
   Object remove(int index):删除指定索引上的元素, 并且返回这个元素
   Object set(int index, Object obj):将集合中指定位置的元素替换为指定对象
  集合的遍历:
   for循环:循环size()次,每次调用get(int)方法获取一个元素;
   private static void iterate1(List list) { 
    for (int i = 0; i < list.size(); i++)
    System.out.println(list.get(i)); // 获取集合中的元 素
   }
   只有List可以用
   迭代器:使用iterator()方法获取一个Iterator对象(迭代器),调用hasNext()    方法判断是否下一个元素,调用next()方法获取元素.
   private static void iterate2(List list) { 
   Iterator iter = list.iterator();  // 获取list对象    的迭代器(Iterator接口的子类对象), 内部有一个指针, 默认指     向第一个元素之前的位置
   while (iter.hasNext())     // 判断是否包含     下一下元素
   System.out.println(iter.next()); // 将指针向后移动一 位, 并返回这个位置上的元素
   }
   List和Set通用
   增强for循环:for (类型 变量名 : 容器) { 循环体 }, 容器长度是多少循环体    就执行多少次, 变量每次引用容器中的一个元素.
   private static void iterate3(List list) { 
   for (Object obj : list)     // 增强for循环, for     (类型  变量名  : 容器) { 循环体 }
   System.out.println(obj);
   }
   List和Set通用
  遍历时删除元素:
   for循环:由于在List集合中删除元素之后, 后面的元素会向前移动, 所以每次   删除之后需要将循环遍历-1
   for (int i = 0; i < list.size(); i++) {
   Person p = (Person) list.get(i);
   if (p.getAge() == 19)
    list.remove(i--); // 删除元素后, 后面的元素会向前移动,     这时我们将指针也向前移动一位
   }
   System.out.println(list);
   细节:由于list.get(i)返回来的对象为Object,所以需要强制转换成子    类才能使用子类的特有属性,如果集合list用泛型定义,则可省去强制转换   的麻烦。
   迭代器:迭代器在使用的过程中不允许修改集合, 如果要删除, 必须使用迭代    器的remove()方法
   Iterator iter = list.iterator();
   while (iter.hasNext()) {
   Person p = (Person) iter.next();
   if (p.getAge() == 19)
    iter.remove();  // 在使用迭代器的时候, 不能修改集合中   的结构, 如果要删除, 需要使用迭代器的remove()方法
   }
   System.out.println(list);
   细节:由于iter.next()返回来的对象为Object,所以需要强制转换成子    类才能使用子类的特有属性,即使这里用泛型定义集合,也必须重新定义    Person,因为iter.next()出现一次,就会指针指向下一个的。
   增强for循环:无法在循环过程中修改集合;增强for循环内部就是使用迭代器,    在使用的过程中不能改变原集合. 由于无法获得迭代器, 所以增强for循环   不能操作集合. 
  泛型:JDK5之后支持带有泛型的类, 集合上如果加了泛型, 只能存储同一类型的   数据, 获取数据时的类型也被指定了,这样做避免了一些不安全因素, 而且省去了   强转的麻烦。格式如下:List<String> list = new ArrayList<String>();JDK1.7版本以  后后面的<>可以省掉。

---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

原创粉丝点击