您现在的位置是:首页 > 正文

List,Queue和Set

2024-02-01 03:51:08阅读 2

目录

1.三者共同点

2.List接口

2.2.ArrayList的使用

2.3LinkList的使用

2.4ArrayList和LinkedList的区别

3.Queue接口

3.1LinkedList的使用(Queue)

3.2Deque 

 3.2.1ArrayDeque

4.Set接口

4.1hashSet

4.2TreeSet


 

1.三者共同点

这三个接口都是Collection的子接口,同时继承了 Collection 接口中的方法,并且扩展了自己特有的方法。

2.List接口

2.1List的特点:

1.有序性: List的元素是有序的,即可以按照插入顺序排序,也可以通过指定位置来操作元素(我们可以指定在那个位置插入那个元素,也可以指定那个位置删除元素)

2.允许重复元素:List中可以包含重复的元素,且每个元素都有单独的索引.

3.可以随机访问:List支持随机访问元素,只要我们知道元素的下标索引

4.支持排序:在List中可以使用sort来排序,也可以使用Comparator接口来定义自己的排序.

总结:List接口是有序的,可以有重复的元素,支持随机访问的具有通用操作方法和排序功能的集合接口.

2.2.ArrayList的使用

添加元素  add()

更改元素 set()

通过索引得到元素  get()

判断元素是否相等  contains()

转换成数组等  toArray()

......

import java.util.*;

public class Test {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("a");
        arrayList.add(null);
        arrayList.add(null);//如果你想想我一样在2,1位置插入元素,就应该怎么做,因为在插入"c"的时候会越界,先插个null就可以避免越界问题
        arrayList.add(2,"c");//此处插入2位置,当并没有替换掉null
        arrayList.add(1,"b");
//        arrayList.set(1,"b");//要替换的话,使用set即可
//        arrayList.set(2,"c");
//        对元素进行排序由于有null存在所以重写Collections方法
        Collections.sort(arrayList, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                if (o1 == null && o2 == null) {
                    return 0; // 两个 null 值相等
                } else if (o1 == null) {
                    return 1; // o1 为 null,o2 较大
                } else if (o2 == null) {
                    return -1; // o2 为 null,o1 较大
                } else {
                    return o1.compareTo(o2); // 比较 o1 和 o2 的大小
                }
            }
        });
//打印元素:
        for (int i = 0; i < arrayList.size(); i++) {
            System.out.println(arrayList.get(i));
            //判断c是否在ArayList中
            System.out.println(  arrayList.contains("c"));
        }


        List<Integer> Larray = new ArrayList<>();
        Larray.add(1);
        Larray.add(2);
        Larray.add(3);
//        转换为数组
        Object[] a =new Object[Larray.size()];
        a = Larray.toArray();
      


        System.out.println(Arrays.toString(a)); // 输出:[1, 2, 3]
        }
    }

2.3LinkList的使用

LiinkList的底层是双向链表,链表之间通过引用将节点连接起来,所以在任意位置插入或者删除元素的时候,无需移动元素,效率比数组高.

add()    插入元素

set()     更改元素

contains()  判断元素是否在链表

indexOf(Object 0)    返回第一个o所在下标

......    

import java.util.LinkedList;

public class LinkedList1 {
    public static void main(String[] args) {
        LinkedList<Integer> linked = new LinkedList<>();
        //添加元素
        linked.add(1);
        linked.add(2);
        linked.add(3);
        //设置3的位置为4
        linked.add(3,4);
        //修改0位置为-1
        linked.set(0,-1);
        linked.add(666);
        linked.add(5);
        linked.add(666);
        //得到0位置的数字
        int t = linked.get(0);
        System.out.println("0下标的值为 "+t);
        linked.addFirst(666);
        //判断999是否在链表中
        boolean bl=linked.contains(999);
        System.out.println("999是否在链表:"+bl);
        System.out.println("遍历链表");
        for(int i:linked){
            System.out.print(i+" ");
        }


    }

}

2.4ArrayList和LinkedList的区别

 

3.Queue接口

3.1Queue的特点

1.先进先出(FIFO)

队列中的元素遵守先进先出的规则,最先进入队列的元素最先出列

2.限制访问

队列有两个限制访问的端点,一个是队头,一个是队尾,元素只能从队尾添加,队头删除

3.1LinkedList的使用(Queue)

offer()    添加元素

poll()     删除队首第一个元素并返回它

peek()   返回队首第一个元素

import java.util.LinkedList;
import java.util.Queue;

public class Queue1 {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        //添加元素
        queue.offer(1);
        queue.offer(2);
        queue.offer(3);
        queue.offer(4);
        //遍历元素
        for (int i:queue){
            System.out.println(i);
        }
        System.out.println("返回第一个元素,并删除"+queue.poll());
        System.out.println("返回第一个元素"+queue.peek());
    }
}

3.2Deque 

双端队列( deque )是指允许两端都可以进行入队和出队操作的队列, deque “double ended queue” 的简称。
元素可以从队头出队和入队,也可以从队尾出队和如入队

 3.2.1ArrayDeque

add()   添加元素

addFirst()   在头部添加元素

addLast()    在尾部添加元素

getFirst()    获取头部元素

getLast()    获取尾部元素

pllFirst()     删除头部元素并返回

poppLast()  删除尾部元素并返回

removeFirst()    删除头部元素

removeLast()    删除尾部元素


        Deque<Integer> stack = new ArrayDeque<>();
        //添加元素
       stack.add(1);
       stack.addFirst(-1);
       stack.addLast(3);
       stack.add(4);
       stack.add(5);
       stack.add(6);
       stack.add(7);
       for (int i:stack){
           System.out.print(i+" ");
       }
        System.out.println();
       //删除元素
        stack.poll();
       stack.removeFirst();
       stack.removeLast();
        for (int i:stack){
            System.out.print(i+" ");
        }

4.Set接口

1.不允许有重复的元素

Set接口中的元素不允许重复,如果试图添加相同的元素,那么将不起作用,你可以添加,但是没用2.无序集合

与List接口不同,Set接口中的元素是无序的,所以不能通过索引来访问Set中的元素

3.装载类型不同

Set只能装对象类型的1元素,无法存储基本类型.如果需要存储基本类型,可以通过其对应的包装类型或者使用第三方库来实现

4.顺序不保障

实现Set接口的类不保障元素的顺序,在遍历Set时可能按照元素的插入顺序,哈希值顺序或者其他的顺序进行遍历.

总结:使用Set接口可以快速的判断一个集合中是否存在某个元素,同时保障集合中不会存在重复的元素,在处理大量元素时非常高效.

4.1hashSet

add()     添加数据

remove(Object o )    移除指定o若不存在则返回false,存在返回true并删除o

size()    获取Set中的元素个数

contains(Object o)   判断是否存在指定元素,存在返回true,否则返回false

clear()   清零

 

import java.util.HashSet;
import java.util.Set;

public class Set1 {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        //添加元素
        set.add("Apple"); // 返回 true
        set.add("Banana"); // 返回 true
        set.add("Apple"); // 返回 false,因为 "Apple" 已经存在于Set中了
        set.add("peach");
        set.add("mango");
        set.add("Watermelon");
        //元素个数
       int t =  set.size();
        System.out.println("元素有:"+t);
        //删除元素
        set.remove("Apple");//返回true
        set.remove("banana");//返回false,"banana"不存在set中
        //判断元素是否存在
        set.contains("Apple");//返回true
        set.contains("banbana");//返回false
        //打印
        for(String st :set) {
            System.out.print(st+" ");
        }
        //清零
        set.clear();
        //无数据打印不了,你可以加两个数据进去试试
        for(String st :set) {
            System.out.print("这是清零后的:"+st+" ");
        }

    }
}

4.2TreeSet

add(E e)

向TreeSet中添加一个元素,如果元素已经存在,则不会对集合做任何改变,返回false;如果元素不存在,则插入该元素到正确的位置,并返回true。

remove(Object o)

从TreeSet中删除指定的元素,如果元素存在,则返回true;否则返回false。

size()    返回TreeSet中的元素个数。

contains(Object o)

检查指定元素是否存在于TreeSet中,如果存在,则返回true;否则返回false。

first()

返回TreeSet中的第一个元素,如果集合为空,则抛出NoSuchElementException异常。

last()

返回TreeSet中的最后一个元素,如果集合为空,则抛出NoSuchElementException异常。

lower(E e)

返回小于指定元素的最大元素,如果没有符合要求的元素,则返回null。

higher(E e)

返回大于指定元素的最小元素,如果没有符合要求的元素,则返回null。

ceiling(E e)

返回大于等于指定元素的最小元素,如果没有符合要求的元素,则返回null。

floor(E e)

返回小于等于指定元素的最大元素,如果没有符合要求的元素,则返回null。

 

import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class Set1 {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        //添加元素
        set.add("Apple"); // 返回 true
        set.add("Banana"); // 返回 true
        set.add("Apple"); // 返回 false,因为 "Apple" 已经存在于Set中了
        set.add("peach");
        set.add("mango");
        set.add("Watermelon");
        //元素个数
       int t =  set.size();
        System.out.println("元素有:"+t);
        //删除元素
        set.remove("Apple");//返回true
        set.remove("banana");//返回false,"banana"不存在set中
        //判断元素是否存在
        set.contains("Apple");//返回true
        set.contains("banbana");//返回false
        //打印
        for(String st :set) {
            System.out.print(st+" ");
        }
        //清零
        set.clear();
        //无数据打印不了,你可以加两个数据进去试试
        for(String st :set) {
            System.out.print("这是清零后的:"+st+" ");
        }
        TreeSet<Integer> settree = new TreeSet<>();
        //添加元素
        settree.add(1);//true
        settree.add(2);
        settree.add(3);
        settree.add(1);//false
        settree.add(5);
        //删除元素
        settree.remove(1);//true
        settree.remove(666);//false
        //返回元素个数
        int tt = settree.size();
        //是否存在元素
        settree.contains(2);//true
        settree.contains(666);//false
        //返回第一个元素,集合为空抛NOSuchElementException
         int first = settree.first();
        System.out.println("第一个元素:"+first);
        //返回TreeSet的最后一个元素,集合为空抛出NoSuchElementException
        int last = settree.last();
        System.out.println("最后一个元素:"+last);
        //返回小于指定元素的最大元素,如无返回null
        int lower = settree.lower(3);
        System.out.println("小于3的最大元素:"+lower);
        //返回大于指定元素的最小元素,如无返回null
        int highter = settree.higher(3);
        System.out.println("d大于3的最小元素"+highter);
        //返回大于等于指定元素的最小值,如无返回null
        int ceiling = settree.ceiling(3);
        System.out.println("大于等于3的最小元素"+ceiling);
        //返回小于等于指定元素的最大元素,如果没有符合要求的元素,则返回null。
        int floor = settree.floor(2);
        System.out.println("小于等于指定元素的最大元素"+floor);
        //遍历
        for(int i :settree){
            System.out.print(i+" ");
        }




    }
}

网站文章

  • 【Django】配置本地域名、解决前后端跨域问题

    由于开发需求,我们可能会需要使用特定域名访问项目,但是当前又不方便直接上线,所以我们可以使用本地域名的方式访问,我们只需要在hosts文件里添加域名和ip即可 1.Linux 如果使用的是Linux系...

    2024-02-01 03:51:00
  • Mysql date的大于某一个时间点 热门推荐

    直接使用类似下面的方法就可以了 select status,edate,cdate from cp_trade_master where pay=2300 and proxy_uid=139144 and edate&gt;&#39;2016-07-27 19:30:00&#39; order by edate desc;

    2024-02-01 03:50:54
  • 安装 thinkphp 的图像处理扩展 [ 2.0 版本 ]

    安装 thinkphp 的图像处理扩展 [ 2.0 版本 ]

    在入口里的composer.json 文件里添加 topthink/think-image信息:&quot;require&quot;: { &quot;php&quot;: &quot;&gt;=5...

    2024-02-01 03:50:27
  • 影碟管理系统c语言小学期,大连东软小学期C语言项目学生成绩管理系统代码.docx...

    大连东软小学期C语言项目学生成绩管理系统代码/*链表版学生成绩管理系统的main函数与链表构建模块的代码*/#include #include #include struct STUDENT{ char name[ 20 ];int score;struct STUDENT * next;}; void showMenu( );struct STUDENT* createList( ...

    2024-02-01 03:50:21
  • 剑指 翻转单词顺序列+左旋转字符串

    题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路: 借用S...

    2024-02-01 03:50:12
  • Nginx学习笔记2【老男孩教育】 最新发布

    Nginx学习笔记2【老男孩教育】 最新发布

    Nginx学习笔记2【老男孩教育】

    2024-02-01 03:49:38
  • equals()方法防止NullPointerException

    使用equals方法的时候可以将字符串常量放在前面避免可能发生的NullPointerException。

    2024-02-01 03:49:31
  • 进程通信之共享内存

    进程通信之共享内存

    共享内存

    2024-02-01 03:49:01
  • 多核与多处理器的区别

    多核与多处理器的区别

    多核:单块CPU上面能处理数据的芯片组的数量,比如,双核就是包括2个相对独立的CPU核心单元组,四核就包含4个相对独立的CPU核心单元组。多处理器:主板上实际插入的cpu数量,一般有两个或者多个处理器...

    2024-02-01 03:48:54
  • 计算机课辅导学困生的方法,后进生辅导计划

    计算机课辅导学困生的方法,后进生辅导计划

    后进生辅导计划后进生辅导计划(一):后进生转化工作是班级工作的重要环节,是班主任作好班级工作的关键。后进生是教师的重点辅导对象,辅导要做到及时、全面、持之以恒,后进生的构成过程决定转化工作务必持之以恒...

    2024-02-01 03:48:47