day15_集合第一天

1、集合体系

红色为今天所学

Collection                          (接口)
|——List                       (接口) 元素有序,可以重复
          |——ArrayList          (类)
          |——Vector             (类)
          |——LinkedList        (类)

     |——Set                       (接口) 元素无序,唯一
          |——HashSet           (类)
          |——TreeSet            (类)

2、集合与数组(掌握)

     1、集合概述
          由于我们使用的是面向对象语言,所以,我们要经常使用对象。而很多时候,我们可能需要使用很的对象,这个时候,我们就只能使用以前讲过的数组进行存储了,而数组的特点是长度固定。这样的话就不适合变化的数据。所以,java重新提供了一种容器,用于存储对象,这种容器叫集合

     2、集合和数组的区别
数组:
数组长度固定。
数组可以存储基本数据类型,也可以存储引用类型。
数组存储的数据类型是一致的。
集合:
集合长度可变。
集合只能存储引用类型。
集合可以存储不同类型的对象

     总结:集合比数组强大,类似于包装类和基本类型的关系  

3、List接口的三个子类的特点(掌握)

1、ArrayList
      底层数据结构是数组,查询快,增删慢
      线程不安全,效率高。
2、Vector
      底层数据结构是数组,查询快,增删慢
      线程安全,效率低。
3、LinkedList
      底层数据结构是链表,查询慢,增删快
      线程不安全,效率高

4、什么时候使用?
       查询多用ArrayList,增删多用LinkedList,如果都多ArrayList

3、Collection接口中的所有方法(掌握)

boolean add(Object obj)将obj添加到集合对象中Collection c = new ArrayList();
c.add("abc");
boolean remove(Object obj)将obj元素从集合中对象中删除Collection c = new ArrayList();
String str = "abc";
c.add(str);//添加
boolean b = c.remove(str);//删除,b=true说明删除成功
void clear()删除集合中的所有元素Collection c = new ArrayList();
c.add("a");//添加
c.add("b");//添加
c.add("c");//添加
c.clear();//清空所有元素
boolean contains(Object obj)判断obj元素是否存在于集合对象中Collection c = new ArrayList();
c.add("a");//添加
c.add("b");//添加
boolean b = c.contains("a");//b=true说明集合中存在字符串a对象
booean isEmpty()判断集合对象中是否包含元素Collection c = new ArrayList();
boolean b = c.isEmpty();//b=true说明集合中没有存储任何元素
int size()集合中一共存储的元素的个Collection c = new ArrayList();
int i = c.size();//i=0说明集合中没有存储任何
Object[] toArray()
将集合转换成数组Collection c = new ArrayList();
c.add("a");
c.add("b");
Object[] array = c.toArray();//array中的元素为{"a","b"}
boolean addAll(Collection c)
将集合c中的元素全部添加到当前集合对象中Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");

Collection c2 = new ArrayList();
c2.add("d");
c2.add("e");

//将c2中的元素全部添加到c1中
c1.addAll(c2);
boolean removeAll(Collection c)
将当前集合中与集合c中相同的元素全部删除(了解)
boolean containsAll(Collection c)
判断调用的集合是否包含传入的集合
(了解)
boolean retainAll(Collection c)
取交集
(了解)

4、List集合的特有方法(掌握)

element:元素
void add(int index,Object element)
在指定位置增加元素ArrayList al = new ArrayList(0;
al.add("老婆");
al.add("老公");
al.add(1,"小三");//在老婆和老公中间添加小三
Object remove(int index)
删除指定位置的元素ArrayList al = new ArrayList(0;
al.add("a");
al.add("c");
al.remove(0);//删除a
Object get(int index)
获取指定位置的元素ArrayList al = new ArrayList(0;
al.add("a");
al.add("c");
Object obj = al.get(1);//获取c
Object set(int index,Object element)
修改指定位置的元素ArrayList al = new ArrayList(0;
al.add("a");
al.add("c");
al.set(1,"b");//将c修改为b

5、集合的遍历(掌握)

1、集合转数组(使用与所有集合)(了解)

  1. Collection c = new ArrayList();
  2. c.add("abc");
  3. c.add("abcd");
  4. c.add("abcde");
  5. Object[] array = c.toArray();
  6. for(int i=0; i<array.length; i++){
  7. String str = (String)array[i];
  8. System.out.println(str.toUpperCase());
  9. }

2、通过get方法和size()方法结合(仅仅适用于Collection的子接口List接口)

  1. ArrayList c = new ArrayList();
  2. c.add("abc");
  3. c.add("abcd");
  4. c.add("abcde");
  5. for(int i=0; i<c.size(); i++){
  6. String str = (String)c.get(i);
  7. System.out.println(str.toUpperCase());
  8. }

  1. ArrayList al = new ArrayList();
  2. al.add(new Person("波老师"));
  3. al.add(new Person("小泽玛利亚"));
  4. al.add(new Person("泷泽萝拉"));
  5. al.add(new Person("樱井莉亚"));
  6. for(int i=0; i<al.size(); i++){
  7. Person p = (Person)al.get(i);
  8. System.out.println(p.getName());
  9. }



3、通过迭代器(适用于所有集合)

  1. Collection c = new ArrayList();
  2. c.add("abc");
  3. c.add("abcd");
  4. c.add("abcde");
  5. //第一步创建迭代器对象
  6. Iterator iterator = c.iterator();
  7. //第二步循环通过hasNext方法判断迭代器中是否有元素。有的话就通过next方法将元素取出
  8. while(iterator.hasNext()){
  9. String str = (String)iterator.next();//因为集合c实际存储的是String类型,所以要把数据强制转换成String
  10. System.out.println(str.toUpperCase());
  11. }

4、增强for循环(适用于所有集合和数组)
注意
        只能操作数组或者是集合
格式
for(数据类型 变量名 : 集合或者数组){

}
  1. //通过增强for遍历数组
  2. String[] arr = {"wo","ai","hei","ma"};
  3. for(String str:arr){
  4. System.out.println(str);
  5. }


  1. //通过增强for遍历集合
  2. Collection c = new ArrayList();
  3. c.add("abc");
  4. c.add("abcd");
  5. c.add("abcde");
  6. for(Object obj: c){
  7. String str = (String)obj;
  8. System.out.println(str);
  9. }


6、迭代器


2、迭代器Iterator
      迭代器:从集合中取出元素的一种标准方式,我们取出任何集合中的元素都可以按照这个标准来获取
     主要遍历Collection集合中的元素,迭代是取出集合中元素的一种方式

3、原理
     于多种集合的数据结构不同,所以存储方式不同,所以,取出方式也不同。这个时候,我们就把判断和获取功能定义在了一个接口中,将来,遍历哪种集合的时候,只要该集合内部实现这个接口即可。
     迭代器是一个内部类,在集合的内部定义了一个类,这个类实现了Iterator接口

4、使用
          List list = new ArrayList();
          list.add(1);
          list.add(3);
         Iterator iterator = list.iterator();
          while(iterator.hasNext()){
               Integer next = (Integer)iterator.next();
               System.out.println(next);
           }
5、常见问题
     ConcurrentModificationException:在迭代的时候给集合增加元素,删除元素(注意:不是通过索引删除)造成的
     并发修改异常:在next()方法第一行进行判断,如果预期的修改次数(expectedModCount)和实际的修改次数(modCount)不同就会发生此异常
 
6、Iterator 和 ListIterator的区别
     1、Iterator是ListIterator的父接口
     2、Iterator是Collection集合的公共的取出容器中元素的方式,对于List,Set都通用。而ListIterator是List集合的特有的取出元素的方式
     3、Iterator中只具备hasNext(),next(),remove()方法,可以删除被遍历到的元素
          ListIterator中具备对遍历到的元素进行增(add)删(remove)改(set)查(next)的方法,可以对元素逆向遍历previouse相对于next,hasPreviouse相对于hasNext(用的很少)

7、成员方法

Iterator 

boolean hasNext()

若被迭代的集合元素还没有被遍历,返回 true

Object next()

返回集合的下一个元素

void remove()

删除集合上一次 next()方法返回的元素。 (若集合中有多个相同的元素, 都可以删掉)

ListIterator  继承自Iterator (知道存在即可)

void add(Object obj)

将指定元素插入next()方法返回的元素后面

void set(Object obj)

用指定元素替换next()previouse()方法返回的元素

boolean hasPrevious()

若被迭代的集合元素还没有被遍历,返回 true

Object previous()

返回集合的上一个元素


7、今天必须掌握的内容。以及常见的笔试题和面试题(学完这个就可以放心学习后面的知识了)

0、基本类型数组里面每一个元素存储的是数据,对于引用类型数组里面每一个元素存储的是地址值
       class Vector{
                private Object[] value = new Object[10];
                add()
                get()
                size()
        }
1、说说集合体系
2、说说集合和数组的区别
3、说说List接口三个子类的特点
4、练习List集合遍历的四种方式,普通for,迭代器,这个必须能够非常快的独立写出来!否则后面课程会非常吃力








posted on 2016-12-23 09:47  虫虫爬啊爬  阅读(247)  评论(0编辑  收藏  举报

导航