Java日常学习之集合

Java日常学习之集合


以下是本篇文章正文内容,下面内容为自己日常学习总结,可能有些地方不太全面,望谅解


一、集合及其应用环境

Java集合类存放在java.util包中,是一个用来存放对象的容器。

 注意:
    ①集合只能存放对象,不能放基本的数据类型。

Integer等即为对象

    ②集合存放的都是对象的引用,而非对象本身。
    ③集合可以存放不同类型,不限数量的数据类型。

适用环境:

 当我们需要将一些相同结构的个体整合在一起时,就可以考虑使用集合了。


二、集合和数组的对比

相似点:

  • 都可以存储多个对象,对外作为一个整体存在

数组的缺点:

  • 长度必须在初始化时指定,且固定不变
  • 数组采用连续存储空间,删除和添加效率低下
  • 数组无法直接保存映射关系
  • 数组缺乏封装,操作繁琐

三、集合架构和分类

虚线框为接口


  • Collect 接口存储对象的特征为不唯一,无序
  • List接口存储对象的特征为不唯一,有序(索引顺序)
  • Set接口存储对象的特征为唯一,无序
  • Map接口存储一组键值对,key 唯一 无序,value 不唯一 无序

以下将不再复述他们的特征

1.List

  • ArrayList

      特性:	
       	线性表中的顺序表
       	实现长度可变数组
      
      特征:
      	按索引遍历元素和随机访问速率快	添加和删除难	
    
  • LinkedList

      特性:	
       	线性双向链表
       	遍历和随机访问元素效率低
      
      特征:
      	添加和删除效率高		遍历和访问效率低
    

线性双向链表


  • 常用指令

     获取元素				 get(位置)
     添加元素到指定位置		 add(位置,值)
     添加多个元素 			 addAll
     遍历输出		  		 toString
     修改指定位置值			 set(位置,值)
     删除 					 remove(位置)
    
  • 综述:

      ArrayList         随机访问多用
      LinkedList		添加和删除多,增加了对首尾的操作
    

2.Set

  • HashSet

      特性:	
       	采用Hashtable存储结构	
       	
      特征:
      	添加、查询和删除速度快
      	无序	
    

hash 基于计算,直接计算到地址
步骤:①计算哈希码 ②计算存储位置 ③存入指定位置

  • LinkedHashSet

      特性:	
       	采用哈希存储结构,同时使用链表维护次序
      
      特征:
      	有序
    
  • TreeSet

      特性:	
       	采用二叉树(红黑树)的存储结构
      
      特征:
      	有序 查询速度比List快(按内容查询)
      	查询速度没有HashSet快
    

按内容查询速度:线性表 > 树 > 哈希表

3.Map

  • HashMap

      特性:	
       	key   无序 唯一 (Set)	
       	Value 无序 不唯一 (Collection)
    
  • LinkedHashMap

      特性:	
      	底层结构是hash+链表
       	key 有序(添加顺序) 唯一 LinkedHashSet
       	value 无序 不唯一 Collection
    
  • TreeMap

      特性:	
       	底层结构是红黑树
       	key 有序(自然顺序) 唯一
       	value 无序 不唯一 Collection
    
  • 常用指令

     获取相应元素的值			 get("键值")
     添加元素到指定位置		 add(位置,值)
     键值					 keySet()
     清除					 clear()
    
  • Map遍历

Set<Map.Entry<String,String>> entrySet = map.entrySet();
Iterator<Map.Entry<String,String>> it = entrySet.iterator();
while (it.hasNext()){
            Entry<String,String> entry = it.next();
            System.out.print(entry.getKey());
        }

map中没有迭代器所以要进行遍历时,先得到所有的key-value组成的set,再进行遍历set

entrySet()返回映射所包含的映射关系的Set集合(一个关系就是键值对)

四、补充

泛型
   可以规定其所加类型
   例:ArrayList<Integer(或自定类型)> list = new ArrayList();
   改善集合的安全性和方便性,无需考虑添加元素是否一致,加入或取出无需强转

集合中的遍历
    for
    foreach
    Iterator(Map中不可用)


谢谢观看!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值