Java日常学习之集合


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



集合

  • 一、集合及其应用环境
  • 二、集合和数组的对比
  • 三、集合架构和分类
  • 1.List
  • 2.Set
  • 3.Map
  • 四、补充



一、集合及其应用环境

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

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

Integer等即为对象

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

适用环境:

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


二、集合和数组的对比

相似点:

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

数组的缺点:

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

三、集合架构和分类

Java里面 集合应用场景 java集合使用场景_python




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

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

1.List

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

Java里面 集合应用场景 java集合使用场景_python_02



  • 常用指令
获取元素				 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中不可用)