美文网首页
java 集合概述

java 集合概述

作者: 赌书只道是寻常 | 来源:发表于2017-06-01 16:21 被阅读0次

    一、集合概述

    Java是一种面向对象语言,如果我们要针对多个对象进行操作,就必须对多个对象进行存储。而数组长度固定,不能满足变化的要求。所以,java提供了集合。

    特点

    1.        长度可以发生改变

    2.        只能存储对象

    3.        可以存储多种类型对象

    与数组区别

    数组

    集合

    长度

    固定

    可变

    存储元素

    基本类型/引用类型

    引用类型

    元素类型的一致性

    必须一致

    可以不一致

    二、集合体系

    集合作为一个容器,可以存储多个元素,但是由于数据结构的不同,java提供了多种集合类。将集合类中共性的功能,不断向上抽取,最终形成了集合体系结构。

    数据结构:数据存储的方式

    Java中集合类的关系图

    集合体系导图(用鼠标拖动图片可看大图或右击图片选择在新标签页中打开图片(I))

    三、Collection

    Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行,于是衍生出两个子类接口List和Set。

    Collection基本功能

    A:添加功能

    boolean add(Object obj):向集合中添加一个元素

    boolean addAll(Collection c):向集合中添加一个集合的元素。

    B:删除功能

    void clear():删除集合中的所有元素。

    boolean remove(Object obj):从集合中删除指定的元素

    boolean removeAll(Collection c):从集合中删除一个指定的集合元素。

    C:判断功能

    boolean isEmpty():判断集合是否为空。

    boolean contains(Object obj):判断集合中是否存在指定的元素。

    boolean containsAll(Collection c):判断集合中是否存在指定的一个集合中的元素。

    D:遍历功能

    Iterator iterator():就是用来获取集合中每一个元素。

    E:长度功能

    int size():获取集合中的元素个数

    F:交集功能

    boolean retainAll(Collection c):判断两个集合中是否有相同的元素。???

    G:把集合转换成数组

    Object[] toArray():把集合变成数组。

    List接口

    List接口下的集合元素存储有序,可以重复。

    List的特有功能

    A:添加功能

    void add(int index, Object obj):在指定位置添加元素

    B:删除功能

    Object remove(int index):根据指定索引删除元素,并把删除的元素返回。

    C:修改功能

    Object set(int index, Object obj):把指定索引位置的元素修改为指定的值,返回修改前的值。

    D:获取功能

    int indexOf(Object o):返回指定元素在集合中第一次出现的索引

    Object get(int index):获取指定位置的元素

    ListIterator listIterator():列表迭代器

    E:截取功能

    List subList(int fromIndex, int toIndex):截取集合。

    Set 接口

    Set接口下的元素无序,不可以重复。其下面分为HashSet和TreeSet。

    HashSet

    底层数据结构是哈希表,线程不安全,效率高。

    保证唯一性依赖两个方法:hashCode()和equals()。

    顺序:

    判断hashCode()值是否相同。

    相同:继续走equals(),看返回值

    如果true:就不添加到集合。

    如果false:就添加到集合。

    不同:就添加到集合。

    TreeSet

    底层数据结构是二叉树,线程不安全,效率高。

    保证元素唯一性的方法时根据返回值是否是0。

    保证排序的两种方式:

    自然排序(元素具备比较性):实现Comparable接口

    比较器排序(集合具备比较性):实现Comparator接口

    四.迭代器的使用

    使用步骤:

    1、通过集合对象获取迭代器对象。

    2、通过迭代器对象判断。

    3、通过迭代器对象获取。

    迭代器原理

    由于多种集合的数据结构不同,所以存储方式不同,所以,取出方式也不同。

    这个时候,我们就把判断和获取功能定义在了一个接口中,将来,遍历哪种集合的时候,只要该集合内部实现这个接口即可。

    迭代器源码

    [java]view plaincopy

    publicinterfaceIterator

    {

    publicabstractbooleanhasNext();

    publicabstractObject next();

    }

    publicinterfaceCollection

    {

    publicabstractIterator iterator();

    }

    publicinterfaceListextendsCollection

    {

    ...

    }

    publicclassArrayListimplementsList

    {

    publicIterator iterator()

    {

    returnnew Itr();

    }

    privateclassItrimplementsIterator

    {

    publicboolean hasNext(){...}

    publicObject next(){...}

    }

    }

    Collection存储字符串和自定义对象并通过迭代器遍历

    1、存储字符串

    [java]view plaincopy

    Collection c =newArrayList();

    c.add("hello");

    c.add("world");

    c.add("java");

    Iterator it = c.iterator();

    while(it.hasNext())

    {

    String s = (String)it.next();

    System.out.println(s);

    }

    2、存储自定义对象(Student类的代码省略)

    [java]view plaincopy

    Collection c=newArrayList();

    Student s1=newStudent("林青霞",26);

    c.add("s1");

    Iterator it=c.iterator();

    while(it.hasNext())

    {

    String s=(String)it.next();

    System.out.println(s);

    }

    ListIterator迭代器是Iterator的子接口

    所以List的遍历方式共有三种

    1、Iterator迭代器

    2、ListIterator迭代器

    3、普通for+get()

    五.Map

    map是一个键值对形式的集合。它的元素都是有键和值组成。Map的键(key)是唯一的,值(value)可以重复。

    Map的功能:

    A:添加功能

    V put(K key ,V value) :当key在集合中不存在是,添加元素;当key存在时替换元素

    B:判断功能

    boolean containsKey (Object key) :判断指定的键是否在集合中存在

    Boolean containsValue(Object value):判断指定的值是否在集合中存在

    Boolean isEmpty() :判断集合是否为空

    C:删除功能

    Void clear():清除所有键值对数据

    D:获取功能

    Object get (Object key) :根据键获取值

    Set keyset(): 所有键的集合

    Collectionvalues() :所有值的集合

    E:长度功能

    Int size()

    Map包括HashMap、HashTable和TreeMap。其中,HashTable已基本被HashMap取代,这里不做讨论。

    (注:HashMap支持null , HashTable不支持null )

    Map遍历的两种方式:(导图上面已有,这里直接上代码了)

    键找值:

    [java]view plaincopy

    publicstaticvoidmain(String[] args) {

    Map map =newHashMap();

    map.put("二阳",23);

    map.put("二峥",24);

    map.put("二光",25);

    Set keys=map.keySet();//把键其中起来,存入到set集合中.

    for(String key:keys){//遍历键集合,获取每一个键。增强for

    Integer value=map.get(key);//让键去找值 get(Object key)

    System.out.println(key+"***"+value);

    }

    }

    键值对:

    [java]view plaincopy

    publicstaticvoidmain(String[] args) {

    Map map =newHashMap();

    map.put("二阳",23);

    map.put("二峥",24);

    map.put("二光",25);

    Set> set=map.entrySet();//获取键值对集合。Set<> entrySet()

    for(Map.Entry me:set){//遍历键值对集合,获取到每一个键值对。增强for,迭代器

    String key=me.getKey();//通过键值对获取键getKey()

    Integer value=me.getValue();//通过键值对获取值getValue()

    System.out.println(key+"***"+value);

    }

    }

    相关文章

      网友评论

          本文标题:java 集合概述

          本文链接:https://www.haomeiwen.com/subject/vosefxtx.html