浅谈java--------集合

集合:可以简单的理解为储存数据的容器。这有没有让我们想起了数组呢?浅谈一下数组和集合的区别,希望有助于我们更好的理解。

集合和数组区别:
1.集合可以存储键值对映射关系数据,数组不可以;
2.集合的长度可以动态改变,数组的长度运行时固定不可变;
3.集合存储的数据为引用类型数据,如果集合存储基本类型数据也会自动装箱转为包装类存储到集合。数组可以存储基本类型和引用类型数据;
4.集合支持多种数据存储结构类型,数组不支持。
   相对而言,集合弥补了数组的不足,数组是速度最快的容器。

简单谈一下集合的特点:

1.集合存储不确定数量的数据,集合长度动态改变;
2.集合可以存储具有键值对映射关系的数据(Map);
3.集合提供多种实现类满足不同的存储方式,如:二叉树结构、队
列结构、堆栈结构等。

集合的类型主要有三种:list,  set,  map(这是学习的重点)

首先要弄清楚集合体系:

请看下图:

这是Collection体系,他有两个主要的子接口list  和set.它们的方法大致相同:

.List集合特点
        1、存入的数据顺序和取出的顺序一样。
        2、通过索引操作元素。
        3、元素可重复的。

方法:
    add();增
    remove();删   可以根据内容移出,或根据下标移出
    size();查   获取集合长度
    set();改  set(索引,"改变的内容");
    get();根据下标获取元素
    addAll();合并集合
    removeAll();删除集合中
    contains();判断集合是否包含对应的元素
    containsAll();集合是否是包含关系
    retainAll(); 取重
    clear();清空集合
    Collections.sort(集合名,new Comparator<>(){});排序

 遍历方式:

1>普通for循环

2>加强for循环

3>迭代器

//迭代遍历
List list=new ArrayList();
        //.iterator();有下一个返回true,没有6false
        Iterable iterable=list.iterator();
        while(iterable.hasNext()){
            Object next=iterable.next();
            system.out.println(next);
        }

 ArrayList的特点:底层用数组实现,增删慢,查询快
 LinkedList:底层用链表实现,增删快,查询慢。

Set :
    特点:元素内容不能重复,无序

Set的遍历方式
    1、增强for循环。
    2、迭代器。
    (因为set是无序的,所以set集合不能通过索引访问。)

set的方法与list大致相同,这里就不在做说明啦!介绍一下个人对HashSet存储的理解:

      HashSet集合先调用存储对象的hashCode方法,得到hashCode值,hashSet集合内部计算出该元素的hash值,该hash值决定了存储元素将来在本集合中存储的位置,所以如果hash不重复,说明该位置没有被其他元素占用,直接存储。如果重复,则说明该对象A将要存储的位置被其他对象B所占用,那么执行第二步,调用equals方法进行详细判断要新增的元素A和已有的元素B是否重复。不重复那就存储,如果重复就不存储。

LinkedHashSet:
    继承了hashSet,在HashSet已有的特征上,扩展了链式结构,保证了存入的顺序与取出的顺序一致,因为LinkedHashSet在保存的时候还要维护链式结构,效率上比HashSet慢。

Map:
    Map用于保存具有映射关系的数据(键值对数据),每条数据由键(key)和值(value)组成,map以键值对方式存储数据的集       合;
Map集合的特点:
     1、Map集合通过存储键值对映射关系的数据。
     2、Map集合通过键key取值。
     3、Map集合键key不可重复。
     4、Map集合键key,值value为Object对象。
     5、HashMap允许key值和value值为null值。
     6、HashTable不允许key值为null值,value可以为空值。 
    map的常用方法:
          put(),添加值
          get();通过键获取值
          keySet();获取键的set集合
          entrySet();获取entry的set集合
    实现原理:
            通过hashcode,equals(),保证键不重复,如果不重复直接存储,如果重复取最后一个值,当我们把键值放在map中,会有entry对象会接受这个键值对,每存储一个键值对增加一个entry对象。遍历的时候遍历entry即可。
  Map集合常用实现类有:HashMap、TreeMap、HashTable、LinkedHashMap,

    map的遍历方式
    第一种:
           通过keySet()获取key的set集合,循环键获取值;
    第二种:
          通过map.entrySet(),获取到Entry键值对对象的集合,foreach遍历Entry键值对对象的集合。
    第三种:

          通过map.entrySet(),获取到Entry键值对对象的集合,再通过iterator迭代器遍历set集合获取到Entry对象。

说了这么多,不知道对您的学习有没有帮助呢?最后,再介绍一下集合的工具类Collections

Collection是集合体系,而Collections是我们操作集合的工具类哟。特意放在最后为大家强调一下。有兴趣的朋友可以进一步研究。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值