Java之集合框架使用细节及常用方法

集合类的由来: 

 对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定。

 就使用集合容器进行存储。

集合特点:

1,用于存储对象的容器。

2,集合的长度是可变的。

3,集合中不可以存储基本数据类型的值。

 

集合容器因为内部的数据结构不同,有多种具体容器。

不断的向上抽取,就形成了集合框架。

 

框架的顶层是Collection接口,定义了集合框架中共性的方法.

 

Collection的常见方法

 

1,添加

 boolean add(E e);

 boolean addAll(Collection<? extends E> c)

2,删除

 boolean remove(E e);

 boolean removeAll(Collection<?> c) ;

 void clear();

3,判断

 boolean contains(Object o)

 boolean containsAll(Collection<?> c)

 boolean isEmply();

4,获取

 int size();

 Iterator<E> iterator();

5,其他

 boolean retainAll(Collection coll);

 Object[] toArray();

 

Collection下常用的子接口

List:有序(存入与取出的顺序一致),元素都有索引(角标),元素可以重复。

Set: 元素不能重复,无序。

 

List特有常见方法

    有一个共性特点就是都可以操作角标。

 

1,添加

    void add(index,element);

    void add(index,collection);

2,删除

    Object remove(index);

3,获取

    Object get(index);

    int indexOf(object);

    int lastIndexOf(object);

    Last subList(from,to);

4,修改

    Object set(index,element);

 

ListIterator迭代器可实现对list集合进行增删改查。

 

List集合常用实现子类:

Vector:内部是数组数据结构。是同步的。(几乎不怎么用,但是比较特殊),可变数组,100%延长。

                增删,查询都很慢。

ArrayList:内部是数组数据结构,是不同步的。替代了Vector。

                如在多线程中,一般采用ArrayList加锁的形式实现。

                可增长数组,50%延长。

                查找元素的速度很快。

LinkedList:内部是链表数据结构,非同步的。增删元素的速度很快。

 

LinkedList新老方法对比:

 

    addFirst();

    addLast();

jdk1.6

    offerFirst();

    offerLast();

 

    getFirst();//获取但不移除,如果链表为空,抛出NoSuchElementExcetion

    getLast();

jdk1.6

    peekFirst();//获取但不移除,如果链表为空,返回null

    peekLast();

 

    removeFirst();//获取并移除,如果链表为空,抛出NoSuchElementExcetion

    removeLast();

jdk1.6

    pollFirst();  获取并移除此列表的第一个元素;如果此列表为空,则返回 null。

    pollLast();

 

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

        Set接口中的方法和Collection中的一致。
常用子类:

        HashSet:内部数据结构是哈希表,是不同步的,存储元素的时候,使用的是元素的hashCode方法来确定位置,如果位置相同,再通过元素的equals方法来确定内容是否相同。

                哈希表判定元素是否相同

                        1,判断的是两个元素的哈希值是否相同,如果相同,再判断两个对象的内容是否相同。

                        2,判断哈希值相同,其实判断的是对象的hashCode得方法,判断内容相同,用的是equals方法。

                        注意:如果哈希值不同,是不需要判断equals的。

 

        LinkedHashSet:这个可以是有序的,与链表结合使用。

 

        TreeSet:可以对Set集合中的元素进行排序,是不同步的。

                    判断元素唯一性的方式:就是比较方法的返回结果是否是0,是0就是相同的元素。compareTo方法比较。

 

        TreeSet对元素进行排序的方式一:

            让元素自身具备比较功能,元素就需要实现Compareable方法覆盖compareTo方法。

           

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/0acec3b11743994050b37d0384642bec.html