常见集合与应用、List集合及其应用

常见集合与应用

什么是集合

java集合类是一种特别有用的工具类,可用于存储数量不等的对象

Java集合包含List(列表)、Set(集合)、Map(映射)以及JDK1.5推出的Quene(队列)四种体系

Java的集合类主要由两个接口派生而出:Collection(所有单数据最顶层的抽象接口)和Map(映射数据结构最顶层的接口)

四种存储结构
  • List代表有序、可重复集合
  • Quene代表队列特性
  • Set代表无序、不可重复集合
  • Map代表存储映射关系的集合

Collection接口及实现

image.png

Map接口及实现
image.png

List接口与ArrayList实现类

List集合
  • List集合代表一个元素有序可重复的集合、集合中每个元素都有其对应的顺序索引
  • List集合允许使用重复元素,通过缩影访问指定位置的元素
  • List集合默认按元素的添加顺序设置元素的索引
Array与LinkedList
image.png

ArrayList、LinkedList、Vector、Stack都是List接口的实现类

ArrayList也就是替代数组用的列表

LinkedList是基于链表数据结构所产生的列表

ArrayList的特点
  • ArrayLIst基于数组实现的list类,是Java数组的有效替代品
  • ArrayList会自动对容量进行扩容,多数情况下无须指定最大长度
  • ArrayList的数据在内存中是连续紧密存储的,基于数据访问速度快
ArrayList的使用方法
//集合存储在Java.util包下
import java.util.ArrayList;
...
    //实例化ArrayList
    ArrayList<String>bookList = new ArrayList<String>();
//新增元素,尾部追加
bookList.add("三国演义");
//返回第一个元素,索引从0开始
String bookName1 = bookList.get(0);
...

< String >表示在bookList里未来的数据都是一个一个字符串 这种书写方式称为泛型,泛型的作用就是约束列表中每一项元素的类型

add(String e)是在尾部添加数据,返回值是Boolean类型,表示列表是否发生了变化

//add方法返回值代表List集合是否发生变化
        boolean result1 = bookList.add("西游记");
        System.out.println("列表是否发生变化:" + result1);

结果:列表是否发生变化:true

add(int index,String element)是在下标为index添加element,

get()是获取的意思 括号里填的是元素的下标,如果输入了不存在的下标,就会报IndexOutOfBoundsException的错误

在IDEA中,输入psvm就能快捷创建一个main()方法了,输入sout就是自动生成一个输出换行语句:System.out.println();,ctrl+d :复制当前行到下一行

            快捷键**ctrl+shift+回车**快捷在句尾添加分号(如果没有分号的话),如果有分号的话在按一遍就会转到下一行

set(int index,String element)

更新设置的意思,返回值String,表示更新之前原始数据是什么

//set方法用于更新指定索引的数据,返回值是更新前的原数据
        String before = bookList.set(3,"西游记后传");
        System.out.println(before);
        System.out.println(bookList);

结果:

西游记
[三国演义, 红楼梦, 水浒传, 西游记后传]

remove()

两种使用方式,第一种就是删除具体的数据第二种根据具体的位置来进行删除,第一种返回值为Boolean类型,表示是否找到需要删除的数据并删除,第二种返回值是被删除的数据

//remove方法有两种形式
        //按数据删除,传入数据,返回是否删除成功的布尔类型
        boolean result2 = bookList.remove("西游记后传");
        System.out.println(result2);
        System.out.println(bookList);

        //按索引位置删除,返回被删除的数据
        String item = bookList.remove(0);
        System.out.println(item);
        System.out.println(bookList);

结果:

true
[三国演义, 红楼梦, 水浒传]
三国演义
[红楼梦, 水浒传]

size()

作用是返回该列表元素的数量,返回值是int

//size方法用于获取List集合的总长度
        int count = bookList.size();
        System.out.println(count);

结果: 2

size()方法也可和其他方法搭配使用

例如:需要更新列表最后一个数据

//更新最后一个数据
        bookList.set(bookList.size() - 1, "测试数据");
        System.out.println(bookList);

结果:[红楼梦, 测试数据]

删除列表最后一个数据

//删除最后一个数据
        bookList.remove(bookList.size() - 1);
        System.out.println(bookList);

结果:[红楼梦]

LinkedList特征与方法应用

特点:

  • LinkedList同时实现了List与Deque(双端队列)两个接口
  • LinkedList在保障有序、允许重复的前提下,也可以作为队列在队首、队尾快速追加数据(在数据写操作的时候效率要比前面的ArrayLIst效率要高一些)
  • LinkedList的数据在内存中是分散存储的,基于链表,拥有良好的数据插入速度,但数据访问低于ArrayList

LinkedList和ArrayList的add()使用办法完全相同

Deque 双端队列接口

无论是在队列的头还是队列的尾都能追加数据,提供addFirst() 在队列的首部新增一个元素、addlast()方法 在队列的尾部新增一个元素

ArrayList与LinkedList存储结构

image.png

ArrayList是开辟一段连续的空间来存取数据,遍历一遍的速度比LinkedList快,但是如果是插入数据时,ArrayList会在把数据放入相应位置之后,之后位置上的数据都要往后挪一位

LinkedList是通过指针的方式来存取数据的,在数据存放的地方加上指向上一个数据位置和指向下一个数据位置的指针,这样插入数据就会比ArrayList快。

三种集合的遍历方式

  • for循环遍历

    for(类型 对象名 : 相应集合的对象){}

    for(String book : bookList){
                System.out.println(book);
            }
    

    可以依次对所有集合中的数据进行提取并且赋值给前面这个对象,开发中最常见

  • forEach方法遍历

    利用对象自带的forEach(对象名->){

    //相应的处理语句

    }

     //方式2:利用forEach方法+Lambda表达式简化循环过程
            bookList.forEach(book->{
                System.out.println(book);
            });
    
  • Iterator迭代器遍历

    在List这个对象中提供了专门用来遍历集合的对象,名字叫做迭代器,通过迭代器可以完成数据的遍历和获取的任务

    interator()返回的也是一个interator对象,也要通过泛型来进行接收,保证和前面每一个元素类型一致

    hasNext() 作用判断是否还有下一个元素,如果有就返回true

    next()作用是获取下一个元素,返回值适合之前定义的对象保持一致

     //方式3:利用Iterator迭代器对象循环输出
            Iterator<String> itr = bookList.iterator();
            while (itr.hasNext()){
                String book = itr.next();//提取出下一个元素,同时将指针向后移动
                System.out.println(book);
            }
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容