黑马程序员_专题:集合复习(Collect,List,Set的区别)

-------android培训java培训、期待与您交流! ----------

Collection
/*
Collection
     |---List :集合中元素是有序的,元素可以重复,该集合体系按索引进行操作。
        |---ArrayList  :底层是数组结构。查询速度快,但增删稍慢。线程不同步。-->可变长度数组,自动50%延长
        |---LinkedList :底层是链表结构。查询稍慢,  但增删快。  线程不同步。-->可变长度数组,自动100%延长
        |---Vector     :底层是数组结构。线程同步,被ArrayList替代了,因为效率低。
     |---Set  :集合中元素是无序的(存入和取出的顺序不一定一致),元素不可重复,
        |--HashSet  :底层数据结构是哈希表,是线程不安全的,不同步。
                    (哈希表按哈希值进行存储,如果哈希值相等则判断元素是否相等,如果元素相等则哈希值进行顺延)
           HashSet是如何保证元素唯一性的呢?
                    是通过元素的两个方法,hashCode和equals来完成。
                    如果元素的HashCode值相同,才会判断equals是否为true。
                    如果元素的hashCode值不同,不会调用equals。
           注意:对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode和equals方法。
              Object的toString()方法其实调用的是:getClass().getName()+'@'+Integer.toHexString(hashCode());

        |--TreeSet  :可以对Set集合中的元素进行排序,
                    底层数据结构的二叉树。 保证元素唯一性的依据:compareTo方法return 0.
            TreeSet排序的第一种方式:
                    让元素自身具备比较性。元素需要实现Comparable接口,覆盖compareTo方法。
                    这种方式也成为元素的自然顺序,或者叫做默认顺序。
            TreeSet的第二种排序方式:
                    当元素自身不具备比较性时,或者具备的比较性不是所需要的。
                    这时就需要让集合自身具备比较性。在集合初始化时,就有了比较方式。
*/

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

在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。

所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。

该接口只能通过List集合的listIterator方法获取。
List的方法:
    可以操作角标是该集合特有方法。
    
    size();获取集合的元素个数;
增
   add(index,element);
   addAll(index,Collection)
删
    remove(index);
改
    set(index ,element);
查
    get(index x);
    subList(from,to);
    listIterator();
    int indexOf(obj);获取指定元素位置的索引
    ListInterator ListInerator();
*/

ArrayList
/*
ArrayList的应用:
   1.去除ArrayList集合中的重复元素。
   2.将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
     比如:存人对象。同姓名同年龄,视为同一个人。为重复元素。
思路:
1,对人描述,将数据封装进人对象。
2,定义容器,将人存入。
3,取出。

List集合判断元素是否相同,依据是元素的equals方法。而Collection里面没有equals方法,所以只有在对象类里实现equals方法。
    当Collection调用boolean contains(object)时,实质上是在判断(object==null ? e==null : object.equals(e));
    当Collection调用remove(object)时,实质上是在判断(object==null ? e==null : object.equals(e));
*/
class  ArrayListDemo
{
    public static void main(String[] args) 
    {
        ArrayList a1 = new ArrayList();
        
        a1.add("123");
        a1.add("888");

        //使用ListIterator在迭代过程中,可以对集合元素进行添加,删除,修改操作。
        ListIterator lit = a1.listIterator();
        while(li.hasNext())
        {
            Object obj = li.next();

            if(obj.equals("java02"))
                //li.add("java009");ListIterator可以对集合元素进行添加、删除、修改操作
                li.set("java006");
        }

        /*
        //使用Iterator在迭代过程中,只能进行集合元素的删除操作。
        Iterator it = al.iterator();
        while(it.hasNext())
        {
            Object obj = it.next();
            if(obj.equals("java02"))
                //al.add("java008");会报并非异常,ConcurrentModificationException异常
                it.remove();//将java02的引用从集合中删除了。
            sop("obj="+obj);
        }*/
    }
}

Vector
/*
枚举就是Vector特有的取出方式。
发现枚举和迭代器很像。
其实枚举和迭代是一样的。

因为枚举的名称以及方法的名称都过长。
所以被迭代器取代了。
枚举郁郁而终了。
*/

class VectorDemo 
{
    public static void main(String[] args) 
    {
        Vector v = new Vector();

        v.add("java01");
        v.add("java02");

        Enumeration en = v.elements();//特有的枚举取出方式
        while(en.hasMoreElements())
        {
            System.out.println(en.nextElement());
        }
    }
}

LinkedList:
/*
LinkedList:特有方法:
addFirst();
addLast();

getFirst();
getLast();
获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException

removeFirst();
removeLast();
获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException

在JDK1.6出现了替代方法。

offerFirst();
offerLast();

peekFirst();
peekLast();
获取元素,但不删除元素。如果集合中没有元素,会返回null。

pollFirst();
pollLast();
获取元素,但是元素被删除。如果集合中没有元素,会返回null。

LinkedList应用:
使用LinkedList模拟一个堆栈或者队列数据结构。

堆栈:先进后出  如同一个杯子。
队列:先进先出 First in First out  FIFO 如同一个水管。
*/

HashSet
/*
Set集合的功能和Collection是一致的。
String有自己的HashCode()方法。
问题: ArrayList和HashCode判断元素是否相同的区别
      ArrayLIst判断元素依赖的是equals(); HashSet()判断元素先依赖HashCode()后依赖equals();

HashSet应用:
    往hashSet集合中存入自定对象,姓名和年龄相同为同一个人,重复元素。
*/

TreeSet
/*
Java中的instanceof关键字:
    instanceof是Java的一个二元操作符,和==,>,<是同一类东东。
    它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。
TreeSet的应用:
    往TreeSet集合中存储自定义对象学生。想按照学生的年龄进行排序。

记住,排序时,当主要条件相同时,一定判断一下次要条件。
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值