Java集合

集合框架的概述
  1. 集合、数组都是对多个数据进行存储操作的结构 java容器
    此时的存储是内存层面 ,不是持久化存储
    2.数组(Array)的特点
    • 初始化时 长度已经确定
    • 数据初始化时,其元素类型也确定
      缺点:
    • 一旦初始化 容器长度就不能变
    • 提供的方法非常有限,删除、插入、添加 效率比较低
    • 获取数组的实际元素个数 麻烦
    • 数组时有序的、可重复
      在这里插入图片描述

在这里插入图片描述
Collection

用于存储单个单个的对象

	- **List接口**
				存储有序的、可重复的数据
					--ArrayList、LinkedList、Vector
    - **Set接口**
				存储无序的、不可重复的数据
					--HashSet、LinkedHashSet、TreeSet

Map

用于存储key—value 键值对

					--Hashtable、HashMap、TreeMap、Porperties、LinkedHashmap

Iterator

       Collection coll=new ArrayList();
        Collection coll1=new ArrayList();

        coll.add("jack");
        coll1.add("jack");
        coll.add("jack");
        coll.add("jack");
        coll.add("jack");
        coll.addAll(coll1);
        //iterator相当于指针作用 
        Iterator iterator = coll.iterator();
        //是否有下个数据
        while (iterator.hasNext()){
        //当前指针的下个数据
            System.out.println(iterator.next());
			    Object next = iterator.next();
            if("jack".equals(next)){
            //删除此数据
                iterator.remove();
            }
        }


List

三者的特点:存储有序的,可重复的数据

  1. ArrayList(线程不安全,效率高)
    底层使用的Object[ ] 就是数组形式存储
  2. LinkedList(线程安全,效率低)
    底层使用的双向链表存储,删除、插入效率快
  3. Vector(线程安全,效率低)
    底层使用的Object[ ] 就是数组形式存储

ArrayList的源码分析
在jdk1.7时
ArrayList list=new ArrayList();底层创建了长度为10的Object[ ]数组elemetData
list add(123)//elemetData[0]=new Integer(123);
.
.
一直add当容器不足时 扩张容器,默认时,扩充他的1.5倍,并且将原有的数组放入其中
在jdk1.8时
ArrayList list=new ArrayList();底层创建了Object[ ]数组elemetData初始化为{ }
list add(123)//elemetData[0]=new Integer(123);
.
.
一直add当容器不足时 扩张容器,默认时,扩充他的1.5倍,并且将原有的数组放入其中
小结:jdk1.7时相当于单例的饿汉式,而jdk1.8相当于懒汉式,延迟了数组的创建,节省了内存。

Set

底层:数组+链表
存储无序的,不可重复的数据
HashSet 线程不安全 可以存储null

public class SetTest {
//
//      1.无序性
//      不等于随机性 是通过数据的哈希值进行排序
//      2.不可重复性
//		保证元素添加是按照equals判断时,不能返回true 即:相同元素只添加了一个
//     
//      add时候 首先已哈希值做判断 相同的情况下就以equals来做判断 
//		如果相同返回true抛弃此元素保持原来的  
//
    public static void main(String[] args) {
        Set set=new HashSet();
        //User对象需要重写equals方法和hashCode方法
        set.add(new User("sss",1));
        set.add(new User("sss",1));
        Iterator iterator = set.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

LinkedHashSet

遍历还是添加的顺序
其添加数据的同时,每个数据还维护了俩个引用,记录前后的数据
这样遍历的效率高于其父类HashSet

TreeSet

按照对象指定属性 进行排序

  1. 添加数据必须是相同类的对象
  2. 自然排序和定制排序俩种方法
  3. 自然排序的标准时compareTo()返回0,不是equals
    定制排序的标准时compare()返回0
Map

HashMap
线程不安全 效率高 存储null的key和value
LinkeHashMap:遍历的时候可以按照原来的顺序来遍历
TreeMap
Hashtable 线程安全的、效率低;不能存储null

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值