java集合(一)

本文深入讲解Java集合框架,包括Collection和Map接口的不同实现类及其特点,如ArrayList、LinkedList、HashSet和HashMap等。同时介绍了泛型的概念及优势,帮助读者更好地理解和运用Java集合。
摘要由CSDN通过智能技术生成

1.集合概述

1  面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。
2 Java
中的集合: JDK为我们提供了一套完整的容器类库,这些容器可以用于存储各种类型的对象,并且长度都是可变的,我们把这些类统称为集合类,它们都位于java.util包中。

1.1集合分类

单列集合Collection
     List:元素有序、包含重复元素、可使用索引
          ArrayList:底层数据结构是数组结构,增删慢,改查快。
          LinkedList:底层是链表数据结构,增删快,删除慢。
          Vector:底层数据结构是数组结构,已被ArrayList替代。       
 
     Set:无序不包含重复元素
             HashSet:通过Hash表结构判断元素唯一性。
双列集合Map:键值映射关系
     HashMap:对键进行Hash表约束的双列集合

1.2集合与数组的辨析

l  容器长度
集合长度可变
数组长度固定
l  存储内容类型
集合存储引用数据类型
数组存储任意类型
l  是否可存储不同类型数据
集合可以存储不同类型数据
数组只能存储相同数据类型

1.3Set集合

Set不包含重复元素的集合 接口,其 子类均无法存放相同元素。最常用的子类是 无序不可重复的 HashSet
HashSet集合由于是无序的,其判断唯一的依据是元素类型的hashCode与equals方法的返回结果。
规则如下:
先判断新元素与集合内已经有的旧元素的HashCode值,如果不同,判断元素不同。
如果相同,再判断equals比较结果,返回true则相同,返回false则仍然不同。
所以,如果是通过HashSet存储自定义类型,需要重写该类的hashcode与equals方法。    

由于没有索引,所以HashSet集合按照传统索引的方式无法遍历,所以这里使用增强for循环。

1.4集合迭代

a)迭代简介

类似ArrayList这样,使用索引进行集合遍历并不是常用的方法。数组与所有的单列集合均可以使用增强for循环完成数据遍历。
增强for循环又叫foreach循环,用于遍历容器,如数组与任意单列集合。
使用格式:     
for ( 集合内元素类型    临时变量  :  被遍历容器 ) {
       // 使用临时变量依次操作容器中的数据
}

b)迭代器Iterator

增强for循环在底层使用的是迭代器Iterator来完成的。我们也可以直接使用迭代器Iterator来完成单列结合的遍历。
使用迭代器完成集合遍历的过程是反复获得集合中元素的过程,通常我们将这个反复获取的过程叫做迭代。
Iterator:迭代器
迭代器的使用步骤:
调用集合的iterator方法,获取迭代器对象
调用迭代器的hasNext方法判断是否有下一个元素
调用迭代器的next获取是否有下一个元素

c)并发修改异常

       迭代的常规用法中我们要尽量避免在迭代过程中为集合添加数据。否则会报错,原因是Java抛出了并发修改异常。(但可以通过迭代器的方法增删。)      
       即在使用Iterator和增强for循环时,均避免类似操作 

2.  泛型

a)泛型概述

用来灵活地将数据类型应用到不同的类、方法、接口当中。将数据类型作为参数传递。泛型替代了Object来代表任意类型,在编译时会擦除。
泛型是数据类型的一部分,我们将类名与泛型合并一起看做数据类型。
泛型的定义:定义泛型类可以预支地使用未知的类型。
泛型的使用:一般在创建对象时,将未知的类型确定具体的类型。

b)泛型代码实现

l  泛型的定义与使用
泛型类:
         定义:类名后<变量>  如:class A<E> {使用E完全类的定义}
         使用:创建对象时确定类型
泛型方法:
         定义:方法返回值前<变量> 如:public <T> void method(){使用T}
         使用:调用方法时确定类型
泛型接口:
         定义:接口后<变量> 如: interface B<T>{使用T完成接口定义}
         使用:
        1、定义类时确定类型
        2、始终不确定类型,直到创建对象时确定类型
泛型通配符
    定义:(查看ArrayList的构造方法)无法再类中使用
       使用:调用方法时可以给予任意类型。

c)泛型优点

提高程序的安全性
将运行期问题转移到了编译期(由于强转的时候我们并不知道Object对应的类型,所以可能出现运行时错误)
省去了类型强转的麻烦
优化了程序设计
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值