java集合实例讲解图解

目录(?)[-]

  1. 集合框架体系概述
  2. CODE
  3. 迭代器Iterator
  4. List集合共性方法
  5. ListIterator
  6. Vector中的枚举
  7. 集合

     

    集合框架体系概述

     java集合实例讲解图解

    集合就是存储对象最常用的一种方式

    数据多了需要封装成对象,对象多了也要进行封装,封装的方式有:数组、集合。

     

    容器分很多种,不断地共性抽取,产生一个体系——集合框架。(先看体系顶层)。

    为什么会出现这么多的容器:每一个容器存储数据的方式不同,这个存储方式称之为:数据结构。

     

    容器 数组 集合
    是否可以存储对象  是
    长度 固定 可变
    是否可以存储基本数据类型

     

    数组和集合都可以存储对象,但数组的长度是固定不变的,集合的长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。

    集合可以存储不同类型的对象。

     

    Collection容器也有增、删、改、查

    集合中存放的不可能是对象(如果那样存放,集合会很胖),而是存放对象的内存地址(引用)。

     

     

    一、add方法的参数类型是Object。以便于接收任意类型对象。

    二、集合中存储的都是对象的引用(地址)。

    添加

    al1.add(“”);加入元素

    al1.addAll(al2);//将al2所有元素加入到al1中的尾角标。

    删除

    al1.remove(1);移除1角标位上的元素

    al1.remove(“”);移除元素

    al1.clear();清空列表

    判断

    al1.contains(“”);判断al1是否包含元素

    al1.isEmpty();判断集合是否为空

    交集

    al1.retainAll(al2);判断集合al1al2是否有交集。并把交集存入al1 。没交集al1为空。取交集

    al1.removeAll(al2);//去交集

    修改

    al.set(1,”xxxx”);  将1角标位上的元素改为xxxx

    获取

    al1.get(1);   获取1角标位上的元素

     

    CODE:

    [java] view plaincopy

    1. import java.util.*;//s
    2. class CollectionDemo
    3. {
    4. public static void main(String[] args)
    5. {
    6. method_2();
    7. }
    8. public static void method_2()
    9. {
    10. ArrayList al1 = new ArrayList();
    11. al1.add(“java01″);
    12. al1.add(“java02″);
    13. al1.add(“java03″);
    14. al1.add(“java04″);
    15. al1.add(“java05″);
    16. ArrayList al2 = new ArrayList();
    17. al2.add(“java01″);
    18. al2.add(“java02″);
    19. al2.add(“java03″);
    20. al2.add(“java06″);
    21. al2.add(“java07″);
    22. al1.retainAll(al2);//取交集,al1中只会保留和al2中相同的元素。也就是说,al1中存放的是交集。
    23. //如果al2和al1没有交集,那么al1为空
    24. sop(al1);
    25. }
    26. public static void method_base()
    27. {
    28. //创建一个集合容器,使用Collection接口的子类。ArrayList
    29. ArrayList al = new ArrayList();//创建一个对象
    30. //1、添加元素。
    31. al.add(“one”);//al对象调用add方法
    32. al.add(“two”);//add(Object obj);因为容器里添加的是任意类型的内容,所以用Object接收。——多态
    33. al.add(“three”);
    34. al.add(“three”);
    35. al.add(“four”);
    36. al.add(“hello”);
    37. sop(“原列表内容:”+al);
    38. al.add(2,”world”);//在2角标位上加入“world”元素
    39. sop(“加入了元素后:”+al);
    40. al.remove(1);//移除(删除)1角标位上的元素。
    41. sop(“移除了1角标位后:”+al);
    42. al.remove(“three”);//移除(删除)列表中第一次出现的“three”
    43. //al.removeRange(1,2);//removeRange(int fromIndex, int toIndex)移除列表中索引在formIndex(包括)和toIndex(不包括)之间的所有元素。(包含头部包含尾)
    44. sop(al.contains(“world”));//判断集合是否包含world
    45. sop(“大小=”+al.size());//打印容器大小。
    46. al.clear();//清空所有元素
    47. sop(al.isEmpty());//判断集合是否为空。
    48. sop(al);//打印容器内容。
    49. }
    50. public static void sop(Object obj)
    51. {
    52. System.out.println(obj);
    53. }
    54. }

    add(Object obj);因为容器里添加的是任意类型的内容,所以用Object接收。——多态

    迭代器Iterator

    迭代器:集合取出元素的方式。

    [java] view plaincopy

    1. Iterator it = al.iterator();
    2.  while(it.hasNext())
    3. {
    4. System.out.println(it.next());
    5. }

    每个容器都有存和取的方式,而且因为每个容器的数据结构不一样,

    存取的方式也不同,具体实现方法不一样,顶层是connection接口

    因此每个集合都具备一个取出的方式。取出需要被描述。

    在集合内部操作最方便,所以就定义了一个内部类,取出方式就可

    以直接访问这些元素。在取出操作前,先要进行判断(判断是否有元素)。

    List集合共性方法

    Collection

    |—List:元素是有序的。元素可以重复,因为该集合体系有索引。

    |—–ArrayList:底层的数据结构使用的是数组结构。特点在于查询速度很快。但是增删稍慢(元素特别多的情况下)线程不同步(一般使用ArrayList,效率高)加锁完成同步

    ArrayList初始容量为10,当超过10时,就new一个新的数组,长度为50%延长。

    |—–LinkedList:底层使用的是链表数据结构。查询很慢(一次往下问),插入、删除元素很快

    如图:

    |—-Vector:底层是数组数据结构。线程同步(增删查都很慢)被ArrayList替代了

    Vector长度也为10,

    |—Set:元素是无序的,元素不可以重复。

    List:

    特有方法>>>凡是可以操作角标的方法都是该体系特有的方法。

     

    特性(共性未写):

    add(index, element);

    addAll(index, Collection);

    remove(index);

    set(index,element);

    get(index);

    subList(from,to);

    listIterator();

    ListIterator

    并发访问

    不能对同一种元素进行多种同时操作。

    可能会引发并发修改异常

    List集合特有的迭代器——ListIterator是Iterator的子接口。

    在迭代时,不可以通过集合对象的方法操作结合中的元素。

    会发生ConcurrentModificationException异常,因此在迭代器时,

    只能用迭代器的方法操作元素。

    但是Iterator方法是有局限的——只能对元素进行判断、取出、移除的

    操作。

    如果想要其他的操作,如添加修改等,就需要使用其子接口

    ListIterator,该接口只能通过List集合的LIstIterator方法获取。

    Vector中的枚举

    枚举就是Vector特有的取出方式,它和迭代器很像,(其实

    枚举和迭代器时一样的),为什么出现迭代:枚举的名称以

    方法名都过长,于是被迭代器取代了。

    LinkedList

    LinkedList。List接口的连接列表实现

    LinkedList的特点:

    ========xxxFirst、xxxLast======

    addFirst():

    addLast();

     

    getFrist();

    getLast();

     

    removeFirst();

    removeLast();

本文链接地址: java集合实例讲解图解