java中的List、Set、数据结构、Collections

List、Set、数据结构、Collections

数据结构

常见的数据结构

在这里插入图片描述

队列

在这里插入图片描述

数组

在这里插入图片描述

链表

在这里插入图片描述

红黑树

在这里插入图片描述

List集合

List接口介绍

java.util.List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List 接口的对象称为List集合。在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素。另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。
看完API,我们总结一下
List接口特点

  1. 它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的

    存储就是按照11、22、33的顺序完成的)。

  2. 它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个

    道理)。

  3. 集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。

tips:List接口的子类java.util.ArrayList类,该类中的方法都是来自List中定义的

List接口中常用方法

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/*
	java.util.List接口 extends Collection接口
	List接口的特点:
		1.有序的集合,存储元素和取出元素的顺序是一致的(存储123 取出123)
		2.有索引,包含了一些带索引的方法
		3.允许存储重复的元素
	
	List接口中带索引的方法(特有)
		- public void add(int index,Eelement):将指定的元素,添加到该集合中的指定位置上 
		- public E get(int index):返回集合中指定位置的元素。
		- public E remove(int index):移除列表中指定位置的元素,返回的是被移除的元素。
		- public E set(int index, Eelement):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。
		注意:
			操作索引的时候,一定要防止索引越界异常
			IndexOut0fBoundsException:索引越界异常,集合会报 								
			ArrayIndexOutOfBoundsException:数组索引越界异常 							
			StringIndexOutofBoundsException:字符串索引越界异常
*/
public class Demo01List{
   
    public static void main(String[] args){
   
        //创建一个List集合对象,多态
        List<String> list = new ArrayList<String>();
        //使用add方法往集合中添加元素
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("a");
        //打印集合
        System.out.println(list);//[a,b,c,d,a] 不是地址重写了toString方法
        
        //public void add(int index,Eelement):将指定的元素,添加到该集合中的指定位置上
        //在c和d之间添加一个itzhu
        list.add(3,"itzhu");
        System.out.println(list);//[a,b,c,itzhu,d,a] 
        
        //public E remove(int index):移除列表中指定位置的元素,返回的是被移除的元素
        //移除c元素
        String reomoveE = list.remove(2);
        System.out.println("被移除的元素:" + reomoveE);//被移除的元素:c
        System.out.println(list);//[a,b,itzhu,d,a]
        
        // public E set(int index, Eelement):用指定元素替换集合中指定位置的元素,返回值的更新前的元素
        //把最后一个a,替换成A
        String setE = list.set(4,"A");
        System.out.println("被替换的元素:" + setE);//被替换的元素:a
        System.out.println(list);//[a,b,itzhu,d,A]
        
        //List集合遍历有3中方式
        //使用普通的for循环
        for(int i = 0; i < list.size(); i++){
   
            //public E get(int index):返回集合中指定位置的元素
            System.out.println(list.get(i));
        }
        System.out.println("=====================");
        //使用迭代器
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
   
            System.out.println(it.next());
        }
        System.out.println("=====================");
        //使用增强for
        for(String s:list){
   
            System.out.println(s);
        }
    }
}

List的子类

ArrayList集合

java.util.Arraylist集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。
许多程序员开发时非常随意地使用ArrayList完成任何需求,并不严谨,这种用法是不提倡的。

LinkedList集合

java.util.LinkedList集合数据存储的结构是链表结构。方便元素添加、 删除的集合

LinkedList是一个双向链表,那么双向链表是什么样子的呢,我们用个图了解下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JzuLLB1a-1621579581934)(D:\朱相龙\java学习\笔记\图片\LinkedList双向链表.png)]

import java.util.LinkedList;

/*
    java.util.LinkedList集合 implements List接口
    LinkedList集合的特点:
        1.底层是一个链表结构:查询慢,增删快
        2.里边包含了大量操作首尾元素的方法
        注意:
            使用LinkedList集合特有的方法,不能使用多态

        - public void addFirst(E e):将指定元素插入此列表的开头
        - public void addLast(E e):将指定元素添加到此列表的结尾
        - public void push(E e):将元素推入此列表所表示的堆栈

        - public E getFirst():返回此列表的第一个元素
        - public E getLast():返回此列表的最后一个元素

        - public E removeFirst():移除并返回此列表的第一个元素
        - public E removeLast():移除并返回此列表的最后一个元素
        - public E pop():从此列表所表示的堆栈处弹出一个元素

        - public boolean isEmpty():如果列表不包含元素,则返回true
 */
public class Demo02LinkedList {
   
    public static void main(String[] args) {
   
        show03();
    }

    /*
        - public void addFirst(Ee):将指定元素插入此列表的开头
        - public void addLast(Ee):将指定元素添加到此列表的结尾
        - public void push(Ee):将元素推入此列表所表示的堆栈
     */
    private static void show01(){
   
        //创建LinkedList集合对象
        LinkedList<String> linked = new LinkedList<String>();
        //使用add方法往集合中添加元素
        linked.add("a");
        linked.add("b");
        linked.add("c");
        System.out.println(linked);//[a, b, c]

        //public void addFirst(E e):将指定元素插入此列表的开头
        //linked.addFirst("wwww");
        linked.push("wwww");
        System.out.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZXLzhuzhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值