IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Java 集合及相关数据结构,List系列集合和泛型使用 -> 正文阅读

[数据结构与算法]Java 集合及相关数据结构,List系列集合和泛型使用

?
?

活动地址:CSDN21天学习挑战赛

集合相比数组的优势

1.存储个数

    数组定义后类型确定,长度固定
    集合类型可不固定,大小可变

2.存储元素类型

    数组可以存储基本类型和引用类型数据
    集合只存储引用类型数据

3.各自适合的场景

    数组适合数据个数和类型确定的场景
    集合适合数据个数不确定,且可做增删元素的场景,
    集合种类更多,功能更强

集合概述体系和常用API

1.体系结构

分为单列(Collection)和双列(Map)

   单列集合,每个元素(数据)只包括一个值
   双列集合,每个元素包含两个值,即键值对
Collection 单列

它的功能能被全部单列集合继承使用
请添加图片描述

List系列集合特点
  添加的元素是有序,可重复,有索引的
  如ArrayList、LinkedList
  注:
      有序:存储和取出元素顺序一致
      有索引:可以通过索引操作元素
      可重复:存储的元素可以重复
Set系列集合特点
   HashSet:无序,不重复,无索引;
   LinkedHashSet:有序,不重复,无索引;
   TreeSet:按照大小默认升序,不重复,无索引

2.Collection API

如图:
请添加图片描述

Collection 集合的遍历方式

遍历即:一个一个的把容器中元素访问一遍

方式一:迭代器

代表:Iterator 对象
是集合的专用遍历方式

获取迭代器
   方法:
   Iterator <对象>iterator()
   即返回集合中迭代器对象,
   该迭代器对象默认指向当前集合的0索引
//创建集合
ArrayList list=new ArrayList();
list.add("张三");//增添元素
如获取Iterator对象
Iterator it =list.iterator();
Iterator 中常用方法
  1.查询当前位置是否存在元素,存在返回true
   boolean hasNext()
   2.获取当前位置元素,同时将迭代器对象移向下一个位置,注意此时这些元素默认为Object 类型,若要指定元素类型,则需要强制转换
   对象.next()
   //注意取元素越界时会导致NoSuchElementException 错误
如判断集合是否有下一个元素
while(it.hasNext){
   //获取集合中元素
   Object obj=it.next()
   //判断集合中的元素是否为“张三”
   if("张三".equals(obj))
   list.remove(obj);//删除元素
}


方式二:foreach或增强for循环

1.增强for循环
可以遍历集合和数组

for(元素数据类型 变量名: 数组或Collection集合)
{
    //此处使用变量(元素)
}

如:
Collection<String> list=new ArrayList<>();
for(String e:list){
  System.out.println(e);
}

注意:增强for修改第三方变量值不会影响集合中元素

方式三:lambda表达式

Lambda 表达式遍历集合

1.常用API

   方法
   default void forEach(Consumer<? super T>action)
   一种结合lambda遍历集合的方法
Collection<String>lists=new ArrayList<>();
lists.forEach(new Consumer<String>(){
    @Override
    public void accept(String s){
    System.out.println(s);   
}
});
即:
lists.forEach(s->{
   System.out.println(s);
});

Collection集合对自定义类型对象的存储

集合中存储的是元素的地址。
样例:
实现在后台存储三部电影,依次展现出来

class Movies{
 private String name;
 private double score;
 private String autor;
 public Movies(String name,double score,String autor)
 {
   this.name=name;
   this.score=score;
   this.autor=autor;
 }
 public String getName(){
 return this.name;
}
public double getScore(){
 return this.score;
}
public String getAutor(){
 return this.autor;
}
}
public class Main{
   public static void main(String []args){
       Collection<Movies> m=new ArrayList<>();
       m.add(new Movies("阿甘正传",9.5,"汤姆.汉克斯"));
        m.add(new Movies("霸王别姬",9.6,"张国荣,张丰毅"));
        m.add(new Movies("肖申克的救赎",9.7,"罗宾斯"));
        for(Movies s:m){
          System.out.println("片名:"+s.getName());
           System.out.println("评分:"+s.getScore());
            System.out.println("主演:"+s.getAutor());
      }       
  }
}

内存图:

请添加图片描述

List系列集合

特有方法(索引操作API)
1.在指定位置插入指定元素
void add(int index,E element)
2.删除指定索引处元素,返回被删除元素
E remove(int index)
3.修改指定索引处元素,返回被修改的元素
E set(int index,E element)
4.返回指定索引处元素
E get(int index)
实现类的底层原理
1.ArrayList底层时基于数组实现,
特点是
     查询元素快,增删相对慢;
     第一次创建集合并添加第一个元素时,在底部创建一个默认长度为10的数组
2.LinkedList底层基于双链表实现的
特点是查询元素慢,增删首尾元素快
遍历方式
 1.迭代器
 2.增强for循环
 3.Lambda表达式
 4.for循环(List集合存在索引)
LinkedList特点

1.特有功能(首尾操作API)

1.列表开头插入指定的元素
public void addFist(E e)
2.追加指定元素到列表尾部
public void addLast(E e)
3.返回列表中首个元素
publc E getFirst()
4.返回列表中最后一个元素
publc E getLast()
5.列表删除并返回第一个元素
public E removeFirst()
6.列表删除并返回最后一个元素
public E removeLast()

2.LinkedList内存图
请添加图片描述
ArrayList内存图
请添加图片描述

泛型的使用

概念

泛型是JDk5中引入的特性
注意:

集合都是泛型的形式,
可在编译阶段约束集合只能操作某种数据类型
//JDK1.7前的写法
Collection<Sting> lists=new ArrayList<String>();
//JDK1.7后的写法
Collection<Sting> lists=new ArrayList<>();
//存储基本类型数据错误写法

Collection<int> lists=new ArrayList<>();
//这是由于集合和泛型只支持引用数据类型,不支持基本数据类型
//集合中存储的元素默认为对象

存储基本类型数据正确写法:使用包装类存储基本类型
Collection<Integer> lists=new ArrayList<>();
Collection<Integer> lists=new ArrayList<>();


集合并发修改异常问题

1.遍历异常出现的可能

 1.迭代器遍历集合且直接用集合删除元素时可能出现
 2.增强for循环遍历集合且直接用集合删除元素时可能出现

2.遍历且删除元素正常情况

 1.迭代器遍历集合,然后用迭代器自己的删除方法
 2.使用for循环遍历并删除元素不会发生错误
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:31:09  更:2022-08-19 19:35:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:43:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码