java基础八---集合Collection

一.集合的概念

1.什么是集合

  • 集合是一种容器, 长度可变, 可以存储任意类型的对象. 基本数据类型也可以装入集合, 但其实内部是先自动装箱成包装类对象, 然后再存入集合的

二.集合的分类

1.Collection

  • List: 可重复, 有存储顺序,有索引
    • ArrayList 底层数据结构是数组, 增删慢, 查找快,线程不安全,效率高。
    • LinkedList 底层数据结构是链表, 增删快, 查找慢,线程不安全,效率高。
    • Vector 底层数据结构是数组, 原理和ArrayList相同, 但线程安全。效率低。
  • Set: 不可重复,存取顺序不一致,无索引
    • HashSet 底层数据结构是哈希表,线程不安全。保证元素唯一性的原理:判断元素的hashcode值是否相同,如果相同,还会继续判断元素的equals方法,是否为true。
    • TreeSet 底层数据结构是二叉树,线程不安全,可以对Set集合中的元素进行排序。保证元素唯一性的依据:compareTo方法return 0。排序的方式有两种:1.让元素自身具备排序。2.构造方法实现Comparator排序。
    • LinkedHashSet

三.遍历集合

1.ArrayList 和 LinkedList  遍历方法:

        ArrayList list=new ArrayList() ;
        list.add("中国");
        list.add("韩国");
        list.add("美国");
        list.add("俄国");
        //方式一: for循环
        for(Object obj:list){
            Log.d(TAG,"国家:"+obj);
        }
        //方式二:迭代器
        ListIterator iterator= list.listIterator();
        while (iterator.hasNext()/*判断是否还有更多的集合元素*/){
            Object obj=iterator.next();//获取集合元素,并且将光标向前推进1
            Log.d(TAG,"国家:"+obj);
            //iterator.remove();//删除next() 返回的元素
            //iterator.set();//修改next() 返回的元素
            //iterator.add(); //增加元素: 如果再next()之前调用将插入next元素之前,如果在next()之后调用将插入next()元素之后
        }


        LinkedList list =new LinkedList();
        list.add("中国");
        list.add("韩国");
        list.addFirst("美国"); //插入第一个下标
        list.addLast("俄国"); //插入最后一个下标
        //方式一: for循环
        for (Object obj:list){
             Log.d(TAG,"国家:"+obj);
        }
        //方式二:迭代器
        ListIterator iterator= list.listIterator();
        while (iterator.hasNext())///判断是否还有更多的集合元素
        {
            Object obj=iterator.next();//获取集合元素,并且将光标向前推进1
            Log.d(TAG,"国家:"+obj);
        }

  2. HashSet  和 TreeSet 遍历

 

 

 

  HashSet 遍历 
  HashSet hashSet=new HashSet();
  hashSet.add(1);
  hashSet.add(2);
  hashSet.add(3);
  hashSet.add(4);
  Iterator iterator=hashSet.iterator();
  while (iterator.hasNext()){
       Log.d(TAG,"number:"+iterator.next());
   }


  TreeSet 遍历 
  TreeSet treeSet=new TreeSet ();
  treeSet.add(1);
  treeSet.add(2);
  treeSet.add(3);
  treeSet.add(4);
  Iterator iterator=treeSet.iterator();
  while (iterator.hasNext()){
       Log.d(TAG,"number:"+iterator.next());
   }

插入查询速度比较: 

         

100000条数据

集合

特点

插入

查询

ArrayList

底层数据结构:数组线程

是否同步:不同步

38ms

迭代器遍历:6ms

For循环遍历:1ms

Foreach遍历:6ms

LinkedList

底层数据结构:链表线程

是否同步:不同步

54ms

迭代器遍历:13ms

HashSet

底层数据结构:哈希表线程

是否同步:不同步

121ms

迭代器遍历:31ms

TreeSet

底层数据结构:二叉树线程

是否同步:不同步

257 ms

迭代器遍历:17ms

 

备注:如果在遍历的过程中需要删除和修改集合元素,那么就使用迭代器遍历集合。

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值